Re[12]: Не могу понять ссылки в C++
От: andrey.desman  
Дата: 17.06.24 07:28
Оценка: +2
Здравствуйте, r0nd, Вы писали:

R>Смелое утверждение. А что дает право тебе считать это «частным случаем»? Тут же в отсутствии аргументации на стандарт, идет слово против слова. Приведи любой «другой случай» доказывающий обратное, где не будет смещения (то есть подтвердиться смелое утверждение rg45) об отсутствии адреса у ссылок.


В x86-64, например, первые сколько-то аргументов (в зависимости от ОС) передаются в регистрах. Достань адрес ссылки t внутри foo.

#include <cstdio>

struct T {
    int a;
};

[[gnu::noinline]] int foo(const T& t) {
    printf("%d\n", t.a);
    return t.a;
}

int main() {
    T t{5};
    foo(t);
    return 0;
}
Re[3]: Не могу понять ссылки в C++
От: sergii.p  
Дата: 17.06.24 08:57
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, vsb, Вы писали:


vsb>>Ссылка это указатель, который никогда не может быть равен NULL, который нельзя изменить и который не нужно разыменовывать.


R>Это достаточно поверхностное представление.


зато просто и понятно. А то гуру языка сразу накидывают определений на страницу и неофиты бегут от языка как от огня
Re[10]: Не могу понять ссылки в C++
От: Stanislav V. Zudin Россия  
Дата: 17.06.24 09:26
Оценка: +2
Здравствуйте, r0nd, Вы писали:

SVZ>>Оптимизация очень даже причем. В релизном кода на стеке может вообще ничего не будет — соптимизируются.


R>B при каком флаге мой код выше соптимизируется до «на стеке может вообще ничего не будет», давайте по конкретнее конфигурацию компилятора номер, версию ОС, название флагов?


Не пойму, то ли ты троль, то ли зануда.
На тебе релизную версию твоего кода.
MSVS 2022, включена оптимизация /O2

;    COMDAT main
_TEXT    SEGMENT
main    PROC                        ; COMDAT

; 225  : {

$LN4:
    sub    rsp, 40                    ; 00000028H

; 226  :     char& a = b;
; 227  :     char* c = &b;
; 228  : 
; 229  :     printf("0x%x, 0x%x, 0x%x", &a, c, &b);

    lea    r9, OFFSET FLAT:?b@@3DA
    lea    r8, OFFSET FLAT:?b@@3DA
    lea    rdx, OFFSET FLAT:?b@@3DA
    lea    rcx, OFFSET FLAT:??_C@_0BB@FDEKFPGE@0x?$CFx?0?50x?$CFx?0?50x?$CFx@
    call    printf

; 230  : 
; 231  :     return 0;

    xor    eax, eax

; 232  : }

    add    rsp, 40                    ; 00000028H
    ret    0
main    ENDP
_TEXT    ENDS


Как видишь, ссылок вообще нет — адреса сразу складываются в регистры.
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Не могу понять ссылки в C++
От: student__  
Дата: 17.06.24 11:06
Оценка:
Здравствуйте, Worminator X, Вы писали:

WX>Разработчик на C++ не должен воспринимать код как магию, он должен полностью понимать внутреннее устройство программы, и в какие инструкции она компилируется.


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

WX>Поэтому изучению STL и других библиотек должно предшествовать полное изучение языковых возможностей, об этом же пишет доцент Столяров в своих книгах.


А Кнут вот для иллюстрации материала язык ассемблера вымышленной машины использовал.
И что, теперь всем тоже на ассемблере работу со списками изучать?
Каждый учится так, как ему удобнее.

Ты либо слишком толсто троллишь, либо программирование — не твоё.
Re[4]: Не могу понять ссылки в C++
От: B0FEE664  
Дата: 17.06.24 13:05
Оценка:
Здравствуйте, r0nd, Вы писали:

R>
R>[/tr]
R>
R>        mov     rdx, QWORD PTR [rbp-16] ; как видите здесь другой адрес
R>        mov     rax, QWORD PTR [rbp-8] ; и снова другой адрес (таким образом утверждение что у ссылки нет адреса - ложно), видите это? Мы адресуемся по другому адресу, нет никакого "алиаса"
R>


Это ничего не доказывает, так как это всего лишь один из возможных вариантов реализации абстрактной машины.
И каждый день — без права на ошибку...
Re[14]: Не могу понять ссылки в C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.06.24 14:56
Оценка: +1 :)
Здравствуйте, r0nd, Вы писали:

R>не привел любой код доказывающий, что мой случай является «частным»?


Если Вы пообещаете заткнуться и свалить из этой темы, я приведу исходник, ключи компилятора и листинг кода, в котором ссылка хранится исключительно в регистре.
Re[15]: Не могу понять ссылки в C++
От: rg45 СССР  
Дата: 17.06.24 15:23
Оценка: :))
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если Вы пообещаете заткнуться и свалить из этой темы, я приведу исходник, ключи компилятора и листинг кода, в котором ссылка хранится исключительно в регистре.


А тот бы джентльмен сказал: "Заткнись, ПОЖАЛУЙСТА, Хью"

--
Отредактировано 17.06.2024 15:24 rg45 . Предыдущая версия .
Re[15]: Не могу понять ссылки в C++
От: r0nd  
Дата: 17.06.24 15:39
Оценка: :)))
On Jun 17, 2024, 5:56 PM, Евгений Музыченко <20355@users.rsdn.org> wrote:

ЕМ>Если Вы пообещаете заткнуться и свалить из этой темы, я приведу исходник, ключи компилятора и листинг кода, в котором ссылка хранится исключительно в регистре.


А это что за очередной "искатель истины". Твой гаражный кореш, rg45? Че ты здесь забыл? Я не покупаю кабеля, ты немного опоздал, тут нет открытых вопросов, Гена Мужиченко. Эта тема давно закрыта, а твое хамство, можешь оставить при себе вместе с "клюцями копилятала".


“Doubt is a killer. You just have to know who you are and what you stand for.” — Jennifer Lopez
Re[16]: Не могу понять ссылки в C++
От: rg45 СССР  
Дата: 17.06.24 15:43
Оценка: +1
Здравствуйте, r0nd, Вы писали:

R>А это что за очередной "искатель истины". Твой гаражный кореш, rg45? Че ты здесь забыл? Я не покупаю кабеля, ты немного опоздал, тут нет открытых вопросов, Гена Мужиченко. Эта тема давно закрыта, а твое хамство, можешь оставить при себе вместе с "клюцями копилятала".


Да щенок ты — глупый и самонадеянный. Не умеющий признавать ошибки. Ну, ничего, жизнь научит.
--
Отредактировано 17.06.2024 15:46 rg45 . Предыдущая версия .
Re[17]: Не могу понять ссылки в C++
От: r0nd  
Дата: 17.06.24 15:53
Оценка:
On Jun 17, 2024, 6:43 PM, rg45 <49596@users.rsdn.org> wrote:

R>Да щенок ты глупый и самонадеянный. Не умеющий признавать ошибки. Ну, ничего, жизнь научит.


Да-да, вон бери Гену своего, тоже по уровню хамства такой же как ты гаражный ареопаг, бери его кабель, и тренируйтесь с опциями компиляции вдвоем.


“Women challenge the status quo because we are never it.” — Cindy Gallop
Re[4]: Не могу понять ссылки в C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.06.24 15:55
Оценка: +1
Здравствуйте, student__, Вы писали:

WX>>Разработчик на C++ не должен воспринимать код как магию, он должен полностью понимать внутреннее устройство программы, и в какие инструкции она компилируется.


__>Какая чушь! Всю жизнь писал на С, и понятия не имел, в какие инструкции компилируется код.

__>На плюсах — тем более, без понятия что там за команды целевого процессора.

Если Вы хотя бы примерно не представляли, какого рода команды порождает Ваш исходный код (арифметико-логические, целочисленные/плавающие, переходы, вызовы, исключения и т.п.), каков примерно их объем на ту или иную конструкцию языка, какие средства CRT и ОС привлекаются для выполнения программы, то Вам не было никакого смысла писать именно на C или C++. С тем же успехом Вы могли писать на любом другом языке, который тянул Ваши задачи.
Re[18]: Не могу понять ссылки в C++
От: rg45 СССР  
Дата: 17.06.24 16:01
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Да-да, вон бери Гену своего, тоже по уровню хамства такой же как ты гаражный ареопаг, бери его кабель, и тренируйтесь с опциями компиляции вдвоем.


Слышь ты, эталон вежливости ссаный, это же ты здесь сопли на кулачок накручивал, листинги просил. Вот тебе и предлагают листинги. Обделался, чепушило?
--
Re[19]: Не могу понять ссылки в C++
От: r0nd  
Дата: 17.06.24 16:15
Оценка:
On Jun 17, 2024, 7:01 PM, rg45 <49596@users.rsdn.org> wrote:

R>Слышь ты, эталон вежливости ссаный, это же ты здесь сопли на кулачок накручивал, листинги просил. Вот тебе и предлагают листинги.


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

R>Обделался, чепушило?


Ну ты опять за свое! Опять ты про свои какахи? У тебя что проекция? Что за анальный якорь, обсуди с Геной это.


“Women challenge the status quo because we are never it.” — Cindy Gallop
Re[20]: Не могу понять ссылки в C++
От: rg45 СССР  
Дата: 17.06.24 16:20
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Вот возьми эти свои листинги и… отдай Гене, пусть вникает, может выпустит новую версию кабеля, вместо того чтоб здесь хамить незнакомым людям.

R>Ну ты опять за свое! Опять ты про свои какахи? У тебя что проекция? Что за анальный якорь, обсуди с Геной это.

Что ты там скулишь еще, чмо щенявое? То, что ты жидко обделался — это просто медицинский факт.
--
Re[21]: Не могу понять ссылки в C++
От: r0nd  
Дата: 17.06.24 16:34
Оценка: :)
On Jun 17, 2024, 7:20 PM, rg45 <49596@users.rsdn.org> wrote:

R>Что ты там скулишь еще, чмо щенявое? То, что ты жидко обделался — это просто медицинский факт.


Очередное анальное замыкание у тебя. Это профессиональное или возрастное? Садись на голубой вагон и катись к Гене с листингами.

Зачем мы обсуждаем это ерунду? Давай новую тему создавай, ты там ответишь — я прейду и скажу «нифига не так», ты снова получишь как минимум гаражного пульцера на блиц-ответе «по ссылкам». Помолодеешь на 10 лет. А текущая тема исчерпала. Ну объясни, своему корешу, что он опоздал на сутки.


“Folks are usually about as happy as they make up their minds to be.” — Abraham Lincoln
Re[22]: Не могу понять ссылки в C++
От: rg45 СССР  
Дата: 17.06.24 16:38
Оценка:
Здравствуйте, r0nd, Вы писали:

R>Очередное анальное замыкание у тебя. Это профессиональное или возрастное? Садись на голубой вагон и катись к Гене с листингами.

R>Зачем мы обсуждаем это ерунду? Давай новую тему создавай, ты там ответишь — я прейду и скажу «нифига не так», ты снова получишь как минимум гаражного пульцера на блиц-ответе «по ссылкам». Помолодеешь на 10 лет. А текущая тема исчерпала. Ну объясни, своему корешу, что он опоздал на сутки.

Иди подмойся и высморкайся, щенок. И в следующий раз не залупайся на тех, кто умнее.
--
Re[5]: Не могу понять ссылки в C++
От: so5team https://stiffstream.com
Дата: 17.06.24 17:05
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если Вы хотя бы примерно не представляли, какого рода команды порождает Ваш исходный код (арифметико-логические, целочисленные/плавающие, переходы, вызовы, исключения и т.п.), каков примерно их объем на ту или иную конструкцию языка, какие средства CRT и ОС привлекаются для выполнения программы, то Вам не было никакого смысла писать именно на C или C++. С тем же успехом Вы могли писать на любом другом языке, который тянул Ваши задачи.


Как обычно у вас очень странная точка зрения. Компилируемые в нативный код языки (будь то Си, Паскаль, Модула-2, Ada, C++ или Rust) хороши как раз тем, что нормально написанный на них код быстро работает даже если программист вообще понятия не имеет о наборе команд архитектуры, под которую код собирается.

Хотя, может быть вы никогда за рамки низкоуровневой разработки под x86/x64 и не выходили...
Re[17]: Не могу понять ссылки в C++
От: wander  
Дата: 17.06.24 17:34
Оценка:
Здравствуйте, so5team, Вы писали:

R>>У нас С++ проходил "факультативом". Потому что конкурс был такой большой, что ты абитуриенты обязаны плюсы были знать на уровне профессионального написания. Те, кто не знал плюсы изначально не проходили по конкурсу.


Да все это фигня. Оценочное суждение. Что для одного "профессиональное написание", то для другого "забагованный, переусложненный код с обилием UB".
Re[6]: Не могу понять ссылки в C++
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.06.24 19:12
Оценка:
Здравствуйте, so5team, Вы писали:

S>Компилируемые в нативный код языки (будь то Си, Паскаль, Модула-2, Ada, C++ или Rust) хороши как раз тем, что нормально написанный на них код быстро работает даже если программист вообще понятия не имеет о наборе команд архитектуры, под которую код собирается.


Фишка в том, что перечисленные языки "быстро работают" лишь в том смысле, что они "явно не тормозят" и не требуют "чрезмерного объема памяти". Но среди них лишь C/C++ имеют качественные отличия, остальные различаются лишь количественно.

Иначе говоря, если нечто реализовано на любом из перечисленных (и многих других) языков, то это гарантированно можно реализовать на C/C++. А вот многое из реализованного на C/C++ невозможно переделать на других языках, не создав собственной реализации под конкретную платформу — даже если какие-то реализации для нее уже есть. Понятно, что во многом это не столько свойства C/C++, сколько традиция, но практически на любой новой платформе сперва делается C/C++, и лишь потом — все остальное.

Именно в этом смысле я и говорил, что выбирать C/C++ для задач, не требующих предельной эффективности, особого смысла нет — это больше дело привычки, моды, совместимости с существующим софтом и т.п.

S>может быть вы никогда за рамки низкоуровневой разработки под x86/x64 и не выходили...


Я ж делал софт не только для ядра и голого железа. По привычке пишу на C++ и высокоуровневый код, для которого лучше подошел бы хоть C#/.NET, но для одиночки попросту удобнее делать все на одном привычном языке и в одной системе разработки.
Re[5]: Не могу понять ссылки в C++
От: student__  
Дата: 17.06.24 19:27
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если Вы хотя бы примерно не представляли, какого рода команды порождает Ваш исходный код (арифметико-логические, целочисленные/плавающие, переходы, вызовы, исключения и т.п.),

Я первый и последний раз писал на асме в универе лабу с использованием i8051.

ЕМ>каков примерно их объем на ту или иную конструкцию языка

знаю среднее количество для С. Это знание никогда не пригодилось в работе, тем более для конкретной конструкции C...

ЕМ>какие средства CRT и ОС привлекаются для выполнения программы

Это с асмом почти никак не связано. Очевидно, что прыжок в системный вызов принято реализовывать в виде специальной отдельной инструкции.

ЕМ>то Вам не было никакого смысла писать именно на C или C++. С тем же успехом Вы могли писать на любом другом языке, который тянул Ваши задачи.

Причины очевидны. Это ЯП для системного и околосистемного софта с реал-тайм требованиями, с вылизанными компиляторами, на которых пишут ядра ОС, и соответственно всё API документировано в терминах C, с кучей литературы и тоннами кода. Нет ни одного ЯП, который состязался бы уверенно по всем этим пунктам одновременно с С и C++.
И чтобы разрабатывать на этих ЯП в большинстве случаев вовсе не нужно знать, передаются ли параметры через регистры или стек и прочую машинерию.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.