Изменение ссылок в C ++ - PullRequest
       0

Изменение ссылок в C ++

0 голосов
/ 14 марта 2012

из C ++ FAQ

«Как переустановить ссылку, чтобы она ссылалась на другой объект?»

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

    int f = 5;
int y =4;
int& u = f;
u = y;
B& bRef = B();
bRef = B();

Этот код находится внутри моей функции main ().

Ссылка на C ++ FAQ https://isocpp.org/wiki/faq/references#reseating-refs

Ответы [ 5 ]

2 голосов
/ 14 марта 2012

Вы не переустанавливаете ссылку, вы просто присваиваете указанному объекту.

#include <iostream>

struct X{
  void operator=(X const&){
    std::cout << "Woops, assignment!\n";
  }
};

int main(){
 X x, y;
 X& rx = x;
 rx = y;
}

Угадай, что это печатает.

1 голос
/ 14 марта 2012

Говоря int & u = f; и тогда и = у; Вы назначаете значение y для f, так как f указывается ссылкой u. Следовательно, вы не переустанавливаете ссылку, а просто меняете значение f.

Почему незаконно / аморально пересматривать ссылку?

0 голосов
/ 14 марта 2012

Значение ссылки не может быть изменено после ее инициализации;он всегда ссылается на тот же объект, который был инициализирован для обозначения ..

0 голосов
/ 14 марта 2012

когда вы вызываете 'u = y;', вы просто присваиваете значение y переменной, на которую указывает u (ее f). По сути, ссылка реализована в виде «указателя» в компиляторе переменных, операция «u = y;», просто установите для памяти значение y.

0 голосов
/ 14 марта 2012

Вы не меняете ссылку, когда говорите u = y;.Вы просто присваиваете значение y переменной f, которая все еще называется u.

Пожалуйста, проверьте значение f, чтобы увидеть эффект.

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