“骤死式”评估方式:一旦表达式的真假值确定,即使表达式中还有部分尚未检验,整个评估工作仍告结束。
C++允许我们重载operator&&和operator|| 两函数进行重载。
下面这个式子:
if( expression1 && expression2 )
会被编译器视为以下两者之一
1、if( expression1.operator&&( expression2 ) //假设operator&&是个member function
2、if( operator&&( expression1, expression2 )//假设operator&&是个全局函数
然后函数调用和“骤死式”语义有两个重大区别:(1)当函数调用动作被执行,所有参数值都必须评估完成,所以,当我们调用operator&&和
operator||时,两个参数都已评估完成。没有什么“骤死式”语义。(2)C++语言规范并未明确定义函数调用动作中各个参数的评估顺序,所以
没办法知道expression1和expression2哪个会被先评估。如此,则没有办法提供程序员预期的某种行为模式。
不能重载的操作符有:
. .* :: ?:
new delete sizeof typeid
static_cast dynamic_cast const_cast reinterpret_cast
More Effectiive C++ ----7th
千万不要重载&& || ,这三个操作符
最新推荐文章于 2021-08-15 00:41:32 发布