+= b;
return a;
? Потому что компилятор заведомо не докажет, что += возвращает ссылку на первый аргумент?
А вы пробовали посмотреть на бинарник?
А там уже как оптимизатор положит.
А почему так ? Есть где посмотреть детали ?
Потому что они возвращают L-value reference
А разве оптимизация не должна помочь этому ? Я имею введу что тут очевидно видно что дальше не используется это временное значение
Стрельба в ногу Стандартом не запрещена...)) Надо подойти к вопросу с чисто формальной точки зрения. Ссылка Type& не считается временным значением.
Я либо не понимаю либо я застрял немного в другом языке. Разве стандарт не говорит о видимом виде исполнения? Или в данном случае это уже компилятор выбирает выбрать так или все же исполнить так но с оптимизацией
Или я непросканировал слово стрельба в ногу не запрещена и тогда все сходится )
Я стесняюсь спросить, а как lvalue reference связано с copy elision?
Я сам сижу и пытаюсь понять
Если вы видите "A& operator+=(A& lhs, const A& rhs);", вы можете сказать _точно_, что возвращает этот оператор? Вот и компилятор тоже не может, не пытаясь решить неразрешимую задачу (см. теорема Райса).
Это может работать по-разному. Сильно зависит от оптимизатора. К примеру, пасс оптимизитора, который делает RVO может находится после того как был сгенерирован код для += и оптимизатор может инферрить какие-то вещи о возвращаемом значении.
Это как? Сгенерили одни инструкции, а потом раз и оптимизатор всё переделал?
Обсуждают сегодня