首页 > 其他 > 详细

7 不要重载&&、||和逗号运算符

时间:2021-08-10 23:38:28      阅读:39      评论:0      收藏:0      [点我收藏+]

C++允许许多运算符的重载,但能重载不是重载的理由。运算符重载目的是使程序更加可读、书写和理解,而不能违背原有的特性去迷惑他人。如果没有一个好的理解,不要去重载。

&&||运算符

C/C++在布尔表达式运算使用短路运算法:一旦确定了表达式的真假,不会运算剩下的表达式。如expression1 && expression2,当expresion1结果为falseexpression2不会被运算。

大多数程序员都知道这个特性,并利用这个特性编写代码:

void function(char * str)
{
	if((str != NULL) && (strlen(str) > 10) {...}
}

通过短路运算特性,当str为空时,不会运算strlen(str)表达式。

C++允许重载&&||运算符,布尔表达式将作为重载函数参数。

expression1 && expression2;//代码
//相当于...
expression1.operator&&(expression2);//成员&&重载函数
operator&&(expression1 && expression2);//全局&&重载函数

函数被调用时,其的所有参数都会被运算,顺序从右到左,没有使用短路运算法。

重载&&||无法实现程序员期望的短路运算特性,所以不应重载&&||运算符。

逗号表达式

逗号表达式用户将多个子表达式组成单个表达式。从左到右逐个运算子表达,并将最后一个子表达式作为逗号表达式的值。

通过重载函数重载逗号运算符,子表达式作为函数参数,并不能控制函数参数的运算顺序,因而无法还原逗号表达式的运算特性。

其它运算符

《MECPP》同时标识了其它不能重载的运算符:

. .* :: ?:
new delete sizeof typeid
static_cast dynamic_cast const_cast reinterpret_cast

7 不要重载&&、||和逗号运算符

原文:https://www.cnblogs.com/sandersunkown/p/15126004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!