из C ++ FAQ
«Как переустановить ссылку, чтобы она ссылалась на другой объект?»
Но когда я делаю это, он компилируется и выполняется нормально.
int f = 5; int y =4; int& u = f; u = y; B& bRef = B(); bRef = B();
Этот код находится внутри моей функции main ().
Ссылка на C ++ FAQ https://isocpp.org/wiki/faq/references#reseating-refs
Вы не переустанавливаете ссылку, вы просто присваиваете указанному объекту.
#include <iostream> struct X{ void operator=(X const&){ std::cout << "Woops, assignment!\n"; } }; int main(){ X x, y; X& rx = x; rx = y; }
Угадай, что это печатает.
Говоря int & u = f; и тогда и = у; Вы назначаете значение y для f, так как f указывается ссылкой u. Следовательно, вы не переустанавливаете ссылку, а просто меняете значение f.
Почему незаконно / аморально пересматривать ссылку?
Значение ссылки не может быть изменено после ее инициализации;он всегда ссылается на тот же объект, который был инициализирован для обозначения ..
когда вы вызываете 'u = y;', вы просто присваиваете значение y переменной, на которую указывает u (ее f). По сути, ссылка реализована в виде «указателя» в компиляторе переменных, операция «u = y;», просто установите для памяти значение y.
Вы не меняете ссылку, когда говорите u = y;.Вы просто присваиваете значение y переменной f, которая все еще называется u.
u = y;
y
f
u
Пожалуйста, проверьте значение f, чтобы увидеть эффект.