这与Matthieu M.提供的关于如何利用+运算符重载(通常是不直接重新分配回左侧参数的运算符)一起使用移动语义的答案有关.
他建议实施三种不同的重载:
inline T operator+(T left, T const& right) { left += right; return left; }
inline T operator+(T const& left, T right) { right += left; return right; } // commutative
inline T operator+(T left, T&& right) { left += right; return left; } // disambiguation
Run Code Online (Sandbox Code Playgroud)
1号和3号是有道理的,但我不明白2的目的是什么.评论建议交换处理,但似乎1和2是互斥的(即实现两个结果模糊)
例如,所有3个实现:
T a, b, c;
c = a + b;
Run Code Online (Sandbox Code Playgroud)
编译器输出:
1> error C2593: 'operator +' is ambiguous 1> could be 'T operator +(const T &,T)' 1> or 'T …