codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> #define PRINT_OUT(msg) \ do { \ using std::cout; \ using std::endl; \ cout << msg << endl; \ } while(false) struct nrvo { nrvo(int id) : id(id) { PRINT_OUT("nrvo: " << id); } nrvo(nrvo const& other) : id(other.id) { PRINT_OUT("nrvo(nrvo const&): " << id); } ~nrvo() { PRINT_OUT("~nrvo: " << id); } friend std::ostream& operator <<(std::ostream& out, nrvo const& value) { return out << value.id; } void init(int n) { PRINT_OUT("init(" << n << ")"); } private: int id; nrvo& operator =(nrvo const&); }; // Different use-cases nrvo unnamed(int n) { return n % 2 == 0 ? nrvo(1) : nrvo(2); } nrvo named(int n) { nrvo ret(42); if (n % 2 == 0) ret.init(1); else ret.init(2); return ret; } nrvo different_names(int n) { if (n % 2 == 0) { nrvo a(42); a.init(1); return a; } else { nrvo b(23); b.init(2); return b; } } int main() { int n; std::cout << "Enter an integer: " << std::flush; std::cin >> n; { PRINT_OUT(endl << "unnamed"); nrvo a = unnamed(n); PRINT_OUT(a); } { PRINT_OUT(endl << "named"); nrvo a = named(n); PRINT_OUT(a); } { PRINT_OUT(endl << "different_names (copy)"); nrvo a = different_names(n); PRINT_OUT(a); } { PRINT_OUT(endl << "different_names (ref)"); nrvo const& a = different_names(n); PRINT_OUT(a); } }
Private
[
?
]
Run code
Submit