Re[10]: Не могу понять ссылки в C++
От: wander  
Дата: 16.06.24 20:27
Оценка: 48 (5) +2
Здравствуйте, r0nd, Вы писали:

R>Память тебя поводит, вот здесь ты утверждал Не могу понять ссылки в C++ что у ссылок нет адреса памяти:


R>

R>- У указателя есть адрес, а у ссылки нет;


R>Короче ссылка на стандарт либо ассемблерный код, демонстрирующий это утверждение


Вот в стандарте написано:

It is unspecified whether or not a reference requires storage

https://eel.is/c++draft/dcl.ref#4
И вот это

There shall be no references to references, no arrays of references, and no pointers to references.

https://eel.is/c++draft/dcl.ref#5

Спецификация недвусмысленно дает понять, что ссылка не может быть адресована (не бывает указателя на ссылку), и что будет ли ссылка иметь storage — не определяется.
На практике это сводится к тому, что компилятор сам решает, нужно ли выделять место в памяти под ссылку или не нужно.
Как правило эта нужда связана с сугубо техническими причинами.

Так вот, КОГДА компилятор соизволит сделать storage под ссылку, то у этого storage на уровне машинного кода может быть адрес(*) (именно может быть, потому как storage может быть в регистре); А когда, соответственно, не соизволит, то адреса не будет.
Из этой особенности прямо следует даже без отдельных определений, что ссылка не объект, потому как у объекта всегда есть storage и мы можем всегда взять адрес этого storage из кода. Даже когда объект в регистре, то взятие адреса насильно заставляет компилятор переносить storage в память, чтобы взятие адреса стало возможным. А у ссылки — не можем. Нет такого механизма в языке.
Мы можем хакнуть код, и в тех случаях, когда компилятор сделал storage для ссылки, и когда этот storage не в регистре, получить его адрес, но НИКАКОГО отношения к C++ этот хак иметь не будет.

В общем резюмируем,
1) когда rg45 писал "у ссылки нет адреса" — имелось в виду "в языке C++ у ссылки нет адреса".
2) когда Евгений писал "А кто пытался убедить Вас в том, что у типа данных "ссылка" якобы нет адреса в памяти" — имелся в виду вот этот вот аспект под звездочкой (*). Т.е. Евгений понимает, что чудес не бывает и ссылка иногда где-то должна храниться, и вот когда она хранится в памяти, у нее реально будет адрес, которой, впрочем, из С++ все равно недоступен легально.

Таким образом тут даже нет противоречия. Тут просто освещались разные аспекты. Товарищи пытались быть объективными в тех условиях, которые вы им поставили в качестве вводных. Если вы пытаетесь на этом строить свои аргументы против них, то к сожалению это просто со стороны выглядит глупо. Типа вот подловили кого-то. Я в таких случаях советую прочесть рассказ Шукшина "Срезал". Это вот почти та же ситуация.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.