Advertisement
RobertDeMilo

RB5.11 NRVO и copy elision

Apr 17th, 2024
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. // Итоги
  2. // В некоторых случаях компилятор опускает перемещение и копирование:
  3. // - Возврат из функции временного объекта (copy elision)
  4. // - Инициализация временным объектом (copy elision)
  5. // - Возврат из функции локальной переменной (NRVO)
  6.  
  7. #include <iostream>
  8. using namespace std;
  9.  
  10. class Logger
  11. {
  12. public:
  13.     Logger() { cout<<"Default ctor\n";}
  14.     Logger(const Logger&) { cout<<"Copy ctor\n";}
  15.     Logger(Logger&&) { cout<<"Move ctor\n";}
  16. };
  17.  
  18. Logger MakeLogger(){
  19.     //copy elision
  20.     return Logger(); // return temporary
  21. }
  22.  
  23. Logger MakeLogger2(){
  24.     Logger logger;
  25.     // ...
  26.     // named return value optimization
  27.     return logger; // return local variable
  28. }
  29.  
  30. int main()
  31. {
  32.     //copy elision
  33.     Logger logger = MakeLogger(); // initialize with temporary
  34.     return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement