More Effective C++ 阅读笔记(六)--哪些运算符不能重载

转载于:http://blog.csdn.net/andylin02/article/details/2774543

More Effective C++ 阅读笔记(六)--哪些运算符不能重载
黑月亮 发表于 2005-10-3 16:22:00 

下面这些操作符不能重载
"&&" ,"||" , ","  , "."  , ".*"  , "::" ,  "?:"
new          delete        sizeof      typeid
static_cast  dynamic_cast  const_cast  reinterpret_cast
下列操作符你可以重载
operator new        operator delete
operator   new[]    operator delete[]
+    -   *   /   %   ^     &   |     ~
!    =   <   >  +=   -=   *=   /=   %=
^=  &=  |=  <<  >>   >>=  <<=  ==   !=
<=  >=  &&  ||  ++   --    ,   ->*  ->
()  []

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值