Advertisement
homer512

Move return

Dec 23rd, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <utility>
  3.  
  4.  
  5. class Foo
  6. {
  7.   int v;
  8. public:
  9.   explicit Foo(int c) noexcept;
  10.   Foo(const Foo&) noexcept;
  11.   Foo(Foo&&) noexcept;
  12.   ~Foo();
  13. };
  14.  
  15. Foo mutable_return(int c)
  16. {
  17.   Foo a(c), b(c + 1);
  18.   return c > 0 ? a : b;
  19. }
  20.  
  21. Foo const_return(int c)
  22. {
  23.   const Foo a(c), b(c + 1);
  24.   return c > 0 ? a : b;
  25. }
  26.  
  27. Foo explicit_const_return(int c)
  28. {
  29.   const Foo a(c), b(c + 1);
  30.   return std::move(c > 0 ? a : b);
  31. }
  32.  
  33. Foo explicit_mutable_return(int c)
  34. {
  35.   Foo a(c), b(c + 1);
  36.   return std::move(c > 0 ? a : b);
  37. }
  38.  
  39. Foo::Foo(int c) noexcept
  40.   : v(c)
  41. { std::cout << "Foo(int)\n"; }
  42.  
  43. Foo::Foo(const Foo& o) noexcept
  44.   : v(o.v)
  45. { std::cout << "Foo(const Foo&)\n"; }
  46.  
  47. Foo::Foo(Foo&& o) noexcept
  48.   : v(o.v)
  49. { std::cout << "Foo(Foo&&)\n"; }
  50.  
  51. Foo::~Foo()
  52. { std::cout << "~Foo()\n"; }
  53.  
  54.  
  55. int main()
  56. {
  57.   std::cout << "Mutable\n";
  58.   mutable_return(0);
  59.   std::cout << "\nConst\n";
  60.   const_return(0);
  61.   std::cout << "\nExplicit Mutable\n";
  62.   explicit_mutable_return(0);
  63.   std::cout << "\nExplicit Const\n";
  64.   explicit_const_return(0);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement