Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Изменить объект, на который указывает ссылка

У Скотта Мейерса написано:
Если да, это подрывает основы, потому что C++ не позволяет изменить объект, на который указывает ссылка
Вопрос: почему приведенный далее код работает в VS2017?
int main() { int i = 10; int& r = i;
r++;
int j = 20; r = j;
i = 5;
int& r2 = r;
return 0; }


Ответ

Судя по всему, вы натолкнулись на этот текст тут. Но там речь идет о совсем другом - присваивании двух переменных, которые являются объектами класса, в которых имеется член-ссылка.
И вопрос о том, что при этом должно происходить со ссылкой. В контексте имеется в виду не то, что нельзя изменять сам объект через ссылку, а то, что ссылка не может по ходу дела вдруг начать указывать на другой объект.
С++ не позволяет никак менять значение самой ссылки, а не объекта, на который он указывает. Ссылка, в отличие от указателя, не может сначала указывать на объект a, а потом вдруг на объект b. Только на один и тот же объект - тот, которым она инициализирована - все время своего существования.
Так понятнее?
Да, фраза переведена несколько двусмысленно, не спорю...

Комментариев нет:

Отправить комментарий