Naturalmente, esto no se compilará:¿Los números literales son mutables o no?
int &z = 3; // error: invalid initialization of non-const reference ....
y esto se compilará:
const int &z = 3; // OK
Ahora, tenga en cuenta:
const int y = 3;
int && yrr = y; // const error (as you would expect)
int && yrr = move(y); // const error (as you would expect)
Pero estas líneas siguientes no compilar para mí . Creo que no debería.
int && w = 3;
int && yrr = move(3);
void bar(int && x) {x = 10;}
bar(3);
¿No permitían esas dos últimas líneas permitir la modificación del literal 3? ¿Cuál es la diferencia entre 3
y un const int? Y finalmente, ¿hay algún peligro con la 'modificación' de los literales?
(g ++ - 4,6 (GCC) 4.6.2 con -std=gnu++0x -Wall -Wextra
)
Para responder a mi propia pregunta: In 'move (3)' tal vez se copia el 3 primero para crear una int temporal que se destruirá al final de la declaración. ¿Es esta la explicación? –
En su segunda declaración: const &z = 3; falta el especificador de tipo. entonces no compila –
Gracias, @CJohnson, normalmente copio y pego código de trabajo aquí. ¡Pero fui descuidado con ese trazador! –