x10 what válido variable valor the siguientes siguiente separadores programacion nombre literales literal las following entero cuál cadenas c++ c++11 const rvalue-reference

c++ - what - ¿cuál es el valor del siguiente literal? 018



¿Los números literales son mutables o no? (1)

Naturalmente, esto no compilará:

int &z = 3; // error: invalid initialization of non-const reference ....

y esto compilará:

const int &z = 3; // OK

Ahora, considere:

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 siguientes líneas se compilan para mí. Creo que no debería.

int && w = 3; int && yrr = move(3); void bar(int && x) {x = 10;} bar(3);

¿No permitirían esas últimas dos líneas que se modifique el literal 3? ¿Cuál es la diferencia entre 3 y una constante? Y, por último, ¿hay algún peligro con los literales ''modificadores''?

(g ++ - 4.6 (GCC) 4.6.2 con -std=gnu++0x -Wall -Wextra )


La referencia rvalue al literal 3 :

int && w = 3;

en realidad está vinculado a un temporal que es el resultado de evaluar la expresión 3 . No está ligado a algún literal platónico 3.

(Todas las siguientes referencias de estándares son del borrador de marzo de 2011, n3242)

3.10 / 1 "Valores y valores"

El valor de un literal como 12, 7.3e5 o true también es un prvalue

Luego, 8.5.3 "Referencias" proporciona las reglas sobre cómo se vincula una referencia al último caso, que dice:

De lo contrario, se creará e inicializará un temporal del tipo "cv1 T1" a partir de la expresión de inicialización utilizando las reglas para una inicialización de copia sin referencia (8.5). La referencia se vincula entonces a lo temporal.

y da como ejemplo algo muy cercano a lo que está en su pregunta:

double&& rrd = 2; // rrd refers to temporary with value 2.0