版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sea_muxixi/article/details/84561919
1:&&和||操作符
C++和C对于"真假表达式"采用所谓的"骤死式"评估方式。
char *p;
if(p!=0 && strlen(p)>10)
...
int rangeCheck(int index)
{
if(index < lowerBound || index > upBound )
{
return -1;
}
}
上述内置的行为永远是从左往右评估表达式。
但是当你重载了&&或||时:
if(expression1 && expresion2) ...
会被编译器视为一下两者之一:
if(expression1.operator&&(expresion2))...
if(operator&&(expression1,expression2))...
上述函数有两个问题:1是函数只有参数正确了,才会被执行。
2是不知道参数的评估顺序。
这与内置的骤死式评估法有一个鲜明的对比,所以请不要重载&&和||。
2:,操作符
表达式如果内涵逗号,那么逗号左侧会被先评估,然后右侧再评估,最后整个逗号表达式的结果以逗号右侧的值为代表。
当把操作符写成一个非成员函数,你绝对无法保证左侧表达式一定比右侧表达式更早评估。
当把操作符写成一个成员函数,你也无法保证左侧会先评估,因为编译器并不强迫做这样的事。
3.不能重载的操作符。
. | .* | :: | ?: |
new | delete | sizeof | typeid |
static_cast | dynamic_cast | const_cast | reinterpret_cast |