Сообщение 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):
А вот так нельзя (non-mandatory copy/move elision, aka NRVO):
И в этом принципиальное отличие RVO от NRVO и обязательного требования от оптимизации. А ты мне тут про какую-то свою веру рассказываешь
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):
А вот так нельзя (non-mandatory copy/move elision, aka NRVO):
И в этом принципиальное отличие RVO от NRVO и обязательного требования от оптимизации. А ты мне тут про какую-то свою веру рассказываешь
Изменения в части copy/move elision коснулись только RVO — оно перестало быть оптимизацей и стало обязательным требованием. А NRVO как было необязательной оптимизацей в C++03, так и осталось необязательной оптимизацией в C++23.
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.