Оператор присваивания и ссылки с++

202
19 декабря 2017, 18:37
int x = 2;
int y = x;
int &z = x;

Собственно, буду краток: почему переменной y присваивается значение переменной х, а z - её ссылка ? В с++ существует какое-то скрытое преобразование со стороны оператора присваивания, и в случае с переменной y, он присваивает ей значение, полученное по адресу, ассоциированному с х, а в случае с &z - сам адрес ? Буду рад любой качественной литературе на эту тему.

Answer 1

Скорее наоборот.

x является адресуемым выражением, lvalue. Когда вы инициализируете другую переменную, то lvalue «понижается» до значения, rvalue, и это самое значение присваивается другой переменной. А вот когда вы инициализируете ссылку, то lvalue как раз для неё и нужно, и оно берётся без понижения.

Заметьте, что у вас речь идёт не о присвоении, а именно об инициализации. При присвоении ссылке снова необходимо значение, rvalue, и оно записывается в переменную, на которую ссылается ссылка.

int x = 2;
int y = 55;
int& z = x; // z - ссылка на x
z = y; // z всё ещё ссылка на x, значение x поменялось на 55

Это объяснение на пальцах. Более подробные объяснения есть в книжках, а уж совершенно точные (а также ужасно формальные и скучные) определения найдутся в стандарте.

READ ALSO
Перевести код из Pascal в C++ [требует правки]

Перевести код из Pascal в C++ [требует правки]

помогите перевести пожалуйста

201
Ошибка с динамическим массивом char

Ошибка с динамическим массивом char

Доброго времени суток, возникла следующая проблема: Нужно возвести в степень(n>30) число xc++ я только начал изучать, не будьте слишком строги,...

287
Проверка целостности S19(SREC) файла C++

Проверка целостности S19(SREC) файла C++

У меня есть файл прошивки для контроллера в формате S19 (SREC)Как я понял внутри файла есть чексуммы

201
Сборка программы, использующей OpenSSL, для разных линуксов

Сборка программы, использующей OpenSSL, для разных линуксов

Есть кроссплатформенная программа заказчика под Window/OsX/Linux - C++/Qt/QmlС линуксами возникает проблема линковки Qt с openssl

199