Почему в пятом учебнике по C ++ ссылка называется неизменной, как работает следующий код? - PullRequest
2 голосов
/ 02 мая 2019

В книге мы объясняем, что не существует способа сделать ссылку ссылающейся на другой объект, как бы ни работал следующий код для c ++ 11.

int i1 = 1, i2 = 0;
int &ri = i1;
ri = i2;

Ответы [ 3 ]

5 голосов
/ 02 мая 2019

ri не меняет то, на что оно указывает, оно меняет значение того, на что оно указывает. Поэтому, если вы напечатаете значение, если i1, вы увидите, что теперь оно равно 0, а если вы измените значение i2, вы увидите, что оно не влияет на ri:

int main() {
    int i1 = 1, i2 = 0;
    int& ri = i1;
    ri = i2; // i1 == 0
    std::cout << "i1 " << i1 << "\n";
    i2 = 5;
    std::cout << "i2 " << i2 << "\n";
}

И вывод

i1 0
i2 5

2 голосов
/ 02 мая 2019

Чтобы лучше понять, попробуйте это:

int i1 = 1, i2 = 0;

int &ri = i1;          // ri refers to i1 and this won't change afterwards
cout << ri <<endl;     // same value as i1, so 1
i1 = 3; 
cout << ri <<endl;     // still same value as i1, but now it's 3
ri = 5; 
cout << i1 <<endl;     // same value as ri since both name refer to the same variable, so 5

ri = i2;               // ri still refers to i1, but copies value of i2 in it
cout << i1<<endl;      // i1 was overwritten through ri
ri = 7;  
cout << i1 << endl     // i1 was overwritten again through ri
     <<i2 <<endl;      // but i2 stays unchanged, since ri does not refer to it.  
2 голосов
/ 02 мая 2019

Почему ссылка называется неизменной в C ++ primer 5th, как работает следующий код?

Поскольку можно изменить значение целого числа.И это то, что делает ri = i2.Ссылка не затронута;это все еще относится к тому же объекту.На значение указанного объекта влияет.Результат такой же, как если бы вы написали i1 = i2.

...