170 похожих чатов

Коллеги, подскажите с NRVO: return a += b; получается ведь хуже, чем a

+= b;
return a;

? Потому что компилятор заведомо не докажет, что += возвращает ссылку на первый аргумент?

15 ответов

22 просмотра

А вы пробовали посмотреть на бинарник?

Дмитрий ⬡-Лапшин Автор вопроса
Dmitriy [Отпуск]
Да

А почему так ? Есть где посмотреть детали ?

Dmitriy [Отпуск]
Потому что они возвращают L-value reference

А разве оптимизация не должна помочь этому ? Я имею введу что тут очевидно видно что дальше не используется это временное значение

Пользователь 61534
А разве оптимизация не должна помочь этому ? Я име...

Стрельба в ногу Стандартом не запрещена...)) Надо подойти к вопросу с чисто формальной точки зрения. Ссылка Type& не считается временным значением.

Dmitriy [Отпуск]
Стрельба в ногу Стандартом не запрещена...)) Надо ...

Я либо не понимаю либо я застрял немного в другом языке. Разве стандарт не говорит о видимом виде исполнения? Или в данном случае это уже компилятор выбирает выбрать так или все же исполнить так но с оптимизацией

Dmitriy [Отпуск]
Стрельба в ногу Стандартом не запрещена...)) Надо ...

Или я непросканировал слово стрельба в ногу не запрещена и тогда все сходится )

Dmitriy [Отпуск]
Потому что они возвращают L-value reference

Я стесняюсь спросить, а как lvalue reference связано с copy elision?

Andrei K
Я стесняюсь спросить, а как lvalue reference связа...

Если вы видите "A& operator+=(A& lhs, const A& rhs);", вы можете сказать _точно_, что возвращает этот оператор? Вот и компилятор тоже не может, не пытаясь решить неразрешимую задачу (см. теорема Райса).

Vladimir Bayrashevskiy
Если вы видите "A& operator+=(A& lhs, const A& rhs...

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

Andrei K
Это может работать по-разному. Сильно зависит от о...

Это как? Сгенерили одни инструкции, а потом раз и оптимизатор всё переделал?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта