Сообщение Re[6]: Не могу понять ссылки в C++ от 16.06.2024 19:51
Изменено 16.06.2024 19:54 Stanislav V. Zudin
Re[6]: Не могу понять ссылки в C++
Здравствуйте, r0nd, Вы писали:
SVZ>>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
В ассемблерном коде всё предельно просто.
Две переменные на стеке, в которые кладётся адрес переменной b.
Затем значения этих переменных перекладываются в регистры для вызова printf.
Видимо оптимизация выключена, потому что код совсем кондовый.
SVZ>>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
В ассемблерном коде всё предельно просто.
Две переменные на стеке, в которые кладётся адрес переменной b.
Затем значения этих переменных перекладываются в регистры для вызова printf.
Видимо оптимизация выключена, потому что код совсем кондовый.
Re[6]: Не могу понять ссылки в C++
Здравствуйте, r0nd, Вы писали:
SVZ>>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
В ассемблерном коде всё предельно просто.
Две переменные на стеке, в которые кладётся адрес переменной b.
Затем значения этих переменных перекладываются в регистры для вызова printf.
Видимо оптимизация выключена, потому что код совсем кондовый.
Апд. Что касается адреса ссылки. Тебе привели пример, который доказывает, что у ссылки адреса не получить. Под капотом может быть что угодно. Иногда ссылка имеет физическое воплощение, но для программиста оно недоступно.
SVZ>>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
В ассемблерном коде всё предельно просто.
Две переменные на стеке, в которые кладётся адрес переменной b.
Затем значения этих переменных перекладываются в регистры для вызова printf.
Видимо оптимизация выключена, потому что код совсем кондовый.
Апд. Что касается адреса ссылки. Тебе привели пример, который доказывает, что у ссылки адреса не получить. Под капотом может быть что угодно. Иногда ссылка имеет физическое воплощение, но для программиста оно недоступно.