Я играю со ссылками на C ++ и заметил немного странное поведение, которое я не могу объяснить. Насколько я понимаю, если у меня есть неконстантная переменная и константная ссылка на эту же переменную, а затем я изменяю неконстантную переменную, ссылка должна отражать эту модификацию.
Пример:
void foo() {
int x = 5;
const int& y = x;
x = 10;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
производит для меня следующий вывод:
x = 10
y = 10
Однако, если я изменю тип на std :: string, ссылка на const не будет отражать измененную переменную:
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;
}
производит для меня следующее:
x = xyz
y = abc
Это нормальное ожидаемое поведение при попытке сделать это с помощью std :: string? (Я использую GCC 4.6.0; в настоящий момент у меня нет другого доступного компилятора, поэтому я не знаю, происходит ли это только с этой конкретной версией.)