#include <iostream>
using namespace std;
int main()
{
int i=9,k=8;
int &q=i;
q=k;
cout<<i<<"\n"<<q<<"\n";
return 0;
}
Вывод:
8
8
Но в моей книге дано "q = k изменяет только значение i, а не q. Это связано с тем, что q, являющееся ссылкой, автоматически отменяется как (* q). Следовательно, значение в адресе, хранящемся в q, заменяется по значению я "Но, как вы видите, значение q также изменяется. Разве это неправильно?
q
, как ссылка, не изменяется. Другими словами, он относится к i
, всегда, навсегда и всегда (пока он не выходит за рамки). Вы не можете заставить q
ссылаться на другой объект. Это означает, что "значение [sic?] Никогда не изменяется". "Значение" q
является адресом i
. Когда вы назначаете q
там, вы действительно назначаете i
.
Вы напечатали там значение i
, а затем значение объекта, к которому относится q
(это i
).
Когда вы инициализируете переменную типа:
int & q = i;
каждый раз, когда вы меняете i, вы меняете q и наоборот.
Ссылка q имеет одинаковое значение i, поэтому тема указывает на то же место памяти.
Поскольку q
является ссылкой на i
, это означает, что это просто псевдоним i
(другое имя для i
).
Так что независимо от того, какое значение у i
будет иметь один i
тот же q
!
Когда вы инициализируете ссылку, как следует
int i = 9;
int &q =i;
q просто становится другим псевдонимом (вы можете сказать ник) i, поэтому, если какое-либо изменение происходит в q, оно будет отражать и в i, и наоборот.