不要重载“&&”“||”或“,”
原则
重载操作符时要保证重载前后行为特性一致;
不可重载的操作符
. .* :: ?: new delete sizeof typeid static_cast dynamic_cast const_cast reinterpret_cast
可以重载的操作符
operator new operator delete
operator new[] operator delete[]
+ - * / % ^ & | ~
! = < > += -= *= /= %=
^= &= |= << >> >>= <<= == !=
<= >= && || ++ -- , ->* ->
() []
问题:
- 二元操作符重载后,二元即为重载后函数的两个入参。C/C++没有规定函数多个参数的求值顺序。故带有求值顺序的多元操作符,在重载后其结果正确性将得不到保证。
- 其中&& ||等含有短路运算的操作符,因编译器无法保证短路运算,易产生非预期结果;“,”操作符的求值顺序为从左到右,整个逗号表达式的值为最后一次计算的值;重载后的“,”也无法保证求值顺序,导致结果非预期。