From 4c0f75c2f634803d325f18df5f5a90f35905e3cc Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Tue, 25 Oct 2016 05:25:12 +0300 Subject: add nrvo_by_default/ --- nrvo_by_default/rvo.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 nrvo_by_default/rvo.cpp (limited to 'nrvo_by_default/rvo.cpp') diff --git a/nrvo_by_default/rvo.cpp b/nrvo_by_default/rvo.cpp new file mode 100644 index 0000000..f8c8f32 --- /dev/null +++ b/nrvo_by_default/rvo.cpp @@ -0,0 +1,73 @@ +#include +#include + +namespace +{ + class C + { + public: + explicit C() + { + std::cout << "\tC::C()\n"; + } + + C(C&&) noexcept + { + std::cout << "\tC::C(C&&)\n"; + } + + C(const C&) + { + std::cout << "\tC::C(const C&)\n"; + } + + C& operator=(C&&) noexcept + { + std::cout << "\tC::operator=(C&&)\n"; + return *this; + } + + C& operator=(const C&) + { + std::cout << "\tC::operator=(const C&)\n"; + return *this; + } + + ~C() + { + std::cout << "\tC::~C()\n"; + } + }; + + C make_rvo() + { + return C{}; + } + + C make_nrvo() + { + C c; + return c; + } +} + +int main() +{ + { + std::cout << "C c\n"; + C c; + } + { + std::cout << "C c(make_rvo())\n"; + C c(make_rvo()); + } + { + std::cout << "C c{make_rvo()}\n"; + C c{make_rvo()}; + } + { + std::cout << "C c = make_rvo()\n"; + C c = make_rvo(); + } + return 0; +} -- cgit v1.2.3