¿Podría alguien explicar cómo se simula este error? y también de qué se queja esto.La referencia no constante solo puede estar vinculada a un lvalue
"Una referencia no constante sólo se puede unir a un valor-I" en C++
¿Podría alguien explicar cómo se simula este error? y también de qué se queja esto.La referencia no constante solo puede estar vinculada a un lvalue
"Una referencia no constante sólo se puede unir a un valor-I" en C++
Un lvalue es, aproximadamente, lo que pueda estar en el lado izquierdo de una declaración de asignación. Referencias proporcionan alias para otros objetos:
std::string s;
std::string & rs = s; // a non-const reference to s
std::string const & crs = s; // a const reference to s
Teniendo en cuenta las definiciones anteriores, en referencia a rs
o crs
es el mismo que en referencia a s
, excepto que no se puede modificar la cadena se hace referencia a través crs
, ya que es const. Una variable es un valor l, por lo que puede enlazar una referencia no const a ella. En contraste puede enlazar referencias const a valores temporales como en:
std::string const & crs1 = std::string();
Sin embargo, el siguiente es ilegal:
std::string & rs1 = std::string();
Esto es porque el uso de referencias no constante que implica que usted desea modificar la referencia objeto. Sin embargo, los temporales vinculados a referencias se destruyen cuando la referencia sale del ámbito. Como no siempre es intuitivo cuando C++ crea objetos temporales, no se permite vincularlos a referencias que no sean const, para evitar la desagradable sorpresa de cambiar su objeto a su gusto, solo para ver que destruyó algunas declaraciones más adelante.
+1 excelente ejemplo –
@Nicola, una pregunta aquí. int metodo1 (int & a); Ahora, hace lo mismo solicitar thsi uno también – Pavan
Absolutamente Una consecuencia directa es que no se puede llamar a esta función pasa un literal entero como argumento –
Esto significa que no se puede hacer algo como esto:
void foo(int &x) { ... }
int bar() { ... }
foo(bar());
Usted necesitaría make foo
tome una referencia const
, o asigne el resultado de bar()
a una variable, y luego pase eso a foo
.
¿Qué términos no comprende, 'referencia no const', 'enlazado' o 'lvalue'? – john
@Seth: la pregunta es * preguntando * por algún código que proporcione este error. El interlocutor no puede satisfacer tu demanda. –
@Steve Sí, mis ojos se saltaron la palabra _simulate_. –