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

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

+= b;
return a;

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

15 ответов

11 просмотров

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

Дмитрий ⬡-Лапшин Автор вопроса
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
Это может работать по-разному. Сильно зависит от о...

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

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

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

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта