More Effective C++ 条款07:千万不要重载&&,和,操作符
C++对于“真假表达式”采用所谓的骤死式评估方式。意思是一单该表达式的真假值确定,即使表达式中还有部分尚未检验,整个评估工作仍高结束。举例:
char *p;
...
if((p != 0) && (strlen(p) > 10))
你无需担心调用strlen时p是否为null指针,因为如果"p是否为0"的测试结果是否定的,strlen就绝不会被调用。同样道理,以下代码:
int rangeCheck(int index)
{
if((index < lowerBound) || (index > upperBound))...
...
}
如果index小于lowerBound,它就绝对不会被拿来和upperBound比较。
如果你为自定义类重载&&和||操作符,你将从根本层面改变整个游戏规则,因为从此“函数调用语义”会取代“骤死式语义”。
if(expression1 && e
共有 0 条评论