Подтвердить что ты не робот

Как ссылки закодированы в С++?

int x = 10;
int& y = x;

Для этого x выделяется как 2/4/8 байт в стеке, а 00... 1010 записывается в эти байты. Как выглядит расположение макета и его содержимое для y?

4b9b3361

Ответ 1

Из стандарта С++ 11 8.3.2.4 [dcl.ref]

Не указано, нужна ли ссылка для хранения

Таким образом, может потребоваться или не понадобиться какое-либо хранилище.

Ответ 2

Позвольте мне процитировать http://en.cppreference.com/w/cpp/language/reference:

Ссылки не являются объектами; они не обязательно занимают хранение, хотя компилятор может выделять хранилище, если необходимо реализовать желаемую семантику (например, нестатический элемент данных ссылочный тип обычно увеличивает размер класса на величину необходимо сохранить адрес памяти)

Ответ 3

С точки зрения языка С++ он не определен.

На практике компиляторы обычно обрабатывают ссылки абсолютно так же, как указатели, хотя в С++ они имеют много разных свойств. Это означает, что адрес ссылочной переменной физически сохраняется. Возможно, единственным предположением, которое может сделать компилятор, является то, что ссылка не является нулевой. Несмотря на это, я думаю, что вы не можете получить доступ к адресу, хранящемуся в ссылочной переменной, в коде С++, не указав сначала указатель.

Обратите внимание, что компилятор часто может оптимизировать ссылочную переменную, чтобы вы даже не могли сказать, где она находится в сборке. И он может сделать то же самое с переменными указателя.