下面这些操作符不能重载"&&" ,"||" , ",", ".", ".*", "::" ,"?:"new
delete
sizeof
typeidstatic_castdynamic_castconst_castreinterpret_cast下列操作符你可以重载operator new
operator deleteoperator new[]
operator delete[]+
- * / % ^
& |
~!
=
+= -= *= /= %=^=&=|=> >>==&&||++ --
, ->*->()[]原因例如:if (expression1 && expression2) ...
对于编译器来说,等同于下面代码之一:if (expression1.operator&&(expression2)) ...// when operator&& is a member functionif (operator&&(expression1, expression2)) ... // when operator&& is a global function
这好像没有什么不同,但是函数调用法与短路求值法是绝对不同的。首先当函数被调用时,需要运算其所有参数,所以调用函数functions operator&& 和 operator||时,两个参数都需要计算,换言之,没有采用短路计算法。第二是C++语言规范没有定义函数参数的计算顺序,所以没有办法知道表达式1与表达式2哪一个先计算。完全可能与具有从左参数到右参数计算顺序的短路计算法相反。
因此如果你重载&&或||,就没有办法提供给程序员他们所期望和使用的行为特性,所以不要重载&&和||。
|