1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include <iostream>
using namespace std;
class Binary
{
public:
Binary() = default;
Binary(Binary const &other)
{
cout << "Copy constructor\n";
}
Binary(Binary &&tmp)
{
cout << "Move constructor\n";
}
Binary &operator+=(Binary const &rhs) &&
{
cout << "Move +=\n";
return *this;
}
Binary &operator+=(Binary const &rhs) &
{
cout << "Copy +=\n";
Binary tmp(*this);
std::move(tmp) += rhs;
swap(tmp);
return *this;
}
void swap(Binary &rhs)
{}
};
Binary &&operator+(Binary &&lhs, Binary const &rhs)
{
cout << "move operator + called and returns\n";
return move(move(lhs) += rhs);
}
Binary &&operator+(Binary const &lhs, Binary const &rhs)
{
cout << "copy operator + called\n";
Binary tmp(lhs);
cout << "copy operator + returns\n";
return move(tmp) + rhs;
}
int main()
{
Binary d1;
d1 + d1 + d1;
cout << "========\n";
Binary{} + Binary{} + Binary{};
}
|