Информация об изменениях

Сообщение Re[6]: Современные компиляторы и NRVO от 01.03.2024 19:33

Изменено 01.03.2024 19:46 rg45

Re[6]: Современные компиляторы и NRVO
Здравствуйте, reversecode, Вы писали:

R>я просто не верю в мифы про немножко беременность

R>и если компилятор может сделать какую то хрень
R>то он ее обязательно сделает и сделает как можно чаще

В какие еще мифы? Я тебе конткретный пример привел:

Вот так можно (mandatory copy/move elision, aka RVO):

MyType might_copy() {
 return MyType{};
}


А вот так нельзя (non-mandatory copy/move elision, aka NRVO):

MyType might_copy() {
 MyType m;
 // много-много кода
 return m; // error: use of deleted function 'MyType::MyType(MyType&&)' 
}


И в этом принципиальное отличие RVO от NRVO и обязательного требования от оптимизации. А ты мне тут про какую-то свою веру рассказываешь
Re[6]: Современные компиляторы и NRVO
Здравствуйте, reversecode, Вы писали:

R>я просто не верю в мифы про немножко беременность

R>и если компилятор может сделать какую то хрень
R>то он ее обязательно сделает и сделает как можно чаще

В какие еще мифы? Я тебе конткретный пример привел:

Вот так можно (mandatory copy/move elision, aka RVO):

MyType might_copy() {
 return MyType{};
}


А вот так нельзя (non-mandatory copy/move elision, aka NRVO):

MyType might_copy() {
 MyType m;
 // много-много кода
 return m; // error: use of deleted function 'MyType::MyType(MyType&&)' 
}


И в этом принципиальное отличие RVO от NRVO и обязательного требования от оптимизации. А ты мне тут про какую-то свою веру рассказываешь

Изменения в части copy/move elision коснулись только RVO — оно перестало быть оптимизацей и стало обязательным требованием. А NRVO как было необязательной оптимизацей в C++03, так и осталось необязательной оптимизацией в C++23.