Я экспериментировал со следующим кодом 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