Значение ссылки в назначении - PullRequest
0 голосов
/ 25 февраля 2019

почему можно изменить значение константы z в приведенном ниже фрагменте кода C ++?Что означает (int &) в 5-й строке?Обратите внимание, что адреса x, y, z различны (cout << & x << & y << & z).Большое спасибо! </p>

int x = 2;
int y = 3;
const int z = x;
cout << z; // the result is 2
(int&) z = y;
cout << z; // the result is 3

1 Ответ

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

Потому что в этом случае у нас есть приведение в левой части выражения присваивания, которое сообщает компилятору, что мы принудительно используем наш идентификатор, чтобы он действовал как ссылка не только для чтения на свое место в памяти, и поскольку мы сознательно "форсируя «поведение», компилятор доверяет нам и разрешает это присваивание.

В некоторых случаях это потенциально опасно, например, когда вы присваиваете const-идентификатор с буквальным значением, потому что это не стандартно, как компиляторы реализуют эту инициализацию,на самом деле некоторые компиляторы, кажется, заменяют вхождения идентификаторов литеральными значениями, а также раскрытием макросов, поэтому вам нужно очень внимательно следить за этой операцией.

...