Переназначение ссылок в C ++ Primer - PullRequest
0 голосов
/ 02 февраля 2019

В C ++ Primer 5th Edition есть раздел о ссылках и const на страницах 97-98:

const int temp = dval;   // create a temporary const int from the double
const int &ri = temp;    // bind ri to that temporary

В этом случае ri связан с временным объектом.Временный объект - это неназванный объект, созданный компилятором, когда ему нужно место для хранения результата вычисления выражения.Программисты C ++ часто используют слово временный как сокращение для временного объекта.Теперь рассмотрим, что могло бы произойти, если бы эта инициализация была разрешена, но ri не был постоянным.Если бы ri не было константой, мы могли бы присвоить ri.Это изменило бы объект, к которому привязан ri.

Возможно, я ошибаюсь, но я подумал, что ссылки не могут быть «повторно сидящими» или «повторно привязанными»,Моя проблема с последним предложением:

Если бы ri не было константой, мы могли бы присвоить ri.Это изменило бы объект, к которому привязан ri.

Это ошибка в книге, или я что-то здесь неправильно понимаю?

Насколько я понимаю, ссылка может бытьподумал о псевдониме или альтернативном имени переменной, хотя я не совсем уверен, правильно ли это.

Спасибо за потраченное время

1 Ответ

0 голосов
/ 02 февраля 2019

Это изменило бы объект, к которому привязан ri.

Это предложение немного неоднозначно.Вы читаете это как ". Это изменит, какой объект ri связан с ", но автор не это имел в виду.Предполагается, что он будет читаться как

. Это приведет к изменениям объекта (а именно, к которому привязан ри).


Из моегопонимая, что можно подумать о псевдониме или альтернативном имени переменной

Это совершенно верно.Например:

int i = 0;
int &r = i;
r = 42;

Здесь r - псевдоним для i, поэтому присвоение r в последней строке изменяет (т. Е. Устанавливает 42) объект, который rсвязан (что i).Другими словами, он устанавливает i в 42.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...