#cpp #ссылки
У Скотта Мейерса написано: Если да, это подрывает основы, потому что C++ не позволяет изменить объект, на который указывает ссылка. Вопрос: почему приведенный далее код работает в VS2017? int main() { int i = 10; int& r = i; r++; int j = 20; r = j; i = 5; int& r2 = r; return 0; }
Ответы
Ответ 1
Судя по всему, вы натолкнулись на этот текст тут. Но там речь идет о совсем другом - присваивании двух переменных, которые являются объектами класса, в которых имеется член-ссылка. И вопрос о том, что при этом должно происходить со ссылкой. В контексте имеется в виду не то, что нельзя изменять сам объект через ссылку, а то, что ссылка не может по ходу дела вдруг начать указывать на другой объект. С++ не позволяет никак менять значение самой ссылки, а не объекта, на который он указывает. Ссылка, в отличие от указателя, не может сначала указывать на объект a, а потом вдруг на объект b. Только на один и тот же объект - тот, которым она инициализирована - все время своего существования. Так понятнее? Да, фраза переведена несколько двусмысленно, не спорю...Ответ 2
Вероятно, Вы не так поняли, что имел ввиду Мейерс. Изменение объектов, на которые указывают ссылки -- вполне возможное действие. Например, когда мы передаем объект в функцию по ссылке. В вашем коде когда вы оперируете с r, вы на самом деле оперируете с объектом, находящимся по адресу, который принадлежит i, и изменяете значение переменной i. Т.о. int & r = i; является "псевдонимом" для переменной i, как когда мы передаем объект в функцию по адресу (по ссылке, например).
Комментариев нет:
Отправить комментарий