Estoy jugando con referencias en C++, y noté un comportamiento extraño que no puedo explicar. Mi entendimiento es que si tengo una variable no const y una referencia constante a esa misma variable y luego modifico la variable non-const, la referencia debería reflejar esa modificación.referente cambiante de const std :: string reference
Ejemplo:
void foo() {
int x = 5;
const int& y = x;
x = 10;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
produce la siguiente salida para mí:
x = 10
y = 10
Sin embargo, si cambio el tipo de std :: string, no parece que la referencia constante para reflejar la variable de modificación:
void foo() {
std::string x = "abc";
const std::string& y = x;
x = "xyz";
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
produce lo siguiente para mí:
x = xyz
y = abc
¿Es este el comportamiento normal esperado al intentar esto con std :: string? (Estoy usando GCC 4.6.0; no tengo ningún otro compilador disponible en este momento, así que no sé si esto solo ocurre con esta versión específica o no).
Ese código compilado con * g ++ - MP-4.6 (GCC) 4.6.0 * 20100814 impresiones 'xyz dos veces, me han tratado en diferentes niveles de optimización . ¿Has * copiado * el código exacto? –
Funciona como esperaba para mí. ("xyz \ nxyz \ n"). Esto me lleva a pensar que hay un error BCAK o un error de copiar y pegar. Verifique su código y publique la versión completa compilable del código (** usando copiar y pegar **). –
Gracias a todos por la información. Logré que funcionara de la manera que esperaba copiando y pegando a otro archivo. Cuando vi el original en modo binario, había una gran cantidad de bytes extraños ocultos antes de la "y" en mi declaración que solo puedo adivinar que de alguna manera estaba causando el problema. No sé cómo compiló así. Pero gracias a todos por ayudarme con esto. ¡Todos ustedes son geniales! – Bobby