Почему отключение необязательного исключения копирования приводит к разному поведению до и после C++17C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему отключение необязательного исключения копирования приводит к разному поведению до и после C++17

Сообщение Anonymous »

Я экспериментировал со следующим кодом C++, используя разные флаги и версии компилятора, наблюдая разное поведение при построении объектов в C++11 и C++17.Я заметил, что с флагом -fno-elide-constructors как в C++17, так и в C++11, NRVO отключается внутри функция f. Однако в C++17 объект t1 создается непосредственно в месте расположения t2, а в C++11 этот шаг не был исключен. Мне интересно, почему в C++17, несмотря на отключение этого флага, этот шаг все равно был исключен, учитывая, что это не случай обязательного исключения копирования!
Также я проверил много источники здесь и эти знаменитые вопросы, и я не мог понять, почему!
Есть также ссылка на код:
https://godbolt.org/z/PYfejba6M< /p>
#include

struct Thing
{
Thing() { std::cout

Подробнее здесь: https://stackoverflow.com/questions/791 ... viors-befo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»