博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么不要重载逻辑&&和逻辑||运算符
阅读量:4212 次
发布时间:2019-05-26

本文共 1017 字,大约阅读时间需要 3 分钟。

     在进行本文正文之前,先解释一下逻辑&&和逻辑||运算符中的短路规则, 比如 0 && 1这一运算符,从左到右,左边是0,就没有必要执行右边的1了,会忽略掉,这就是短路规则。

    先上代码,具体看注释,代码如下:

     

#include 
#include
using namespace std;class Test{ int i;public: Test(int i) { this->i = i; } Test operator+ (const Test& obj) { Test ret(0); cout << "执行+号重载函数" << endl; ret.i = i + obj.i; return ret; } bool operator&& (const Test& obj) { cout << "执行&&重载函数" << endl; return i && obj.i; }};// && 从左向右void main(){ int a1 = 0; int a2 = 1; cout << "注意:&&操作符的结合顺序是从左向右,不论&&右边是否是括号,从左到右严格执行" << endl; if (a1 && (a1 + a2)) { cout << "有一个是假,则不在执行下一个表达式的计算" << endl; } Test t1 = 0; Test t2 = 1; //if( t1 && (t1 + t2) ) //t1 && t1.operator+(t2) //t1.operator&&( t1.operator+(t2) ) //1 && || 重载他们 不会产生短路效果,这里是重载了逻辑&&运算符 if (t1 && (t1 + t2)) { //相当于t1.operator&&(t1.operator+(t2));, 在这里会先计算t1.operator+(t2) cout << "两个函数都被执行了,而且是先执行了+" << endl; } system("pause"); return;}/**输出结果为:注意:&&操作符的结合顺序是从左向右,不论&&右边是否是括号,从左到右严格执行执行+号重载函数执行&&重载函数*/

 

总结: 逻辑&&和逻辑||运算符是可以重载的,但是重载不能实现逻辑&&和逻辑||运算符的短路功能

转载地址:http://urzmi.baihongyu.com/

你可能感兴趣的文章
SQL Server索引原则
查看>>
清理SQL Server 2008数据库日志
查看>>
索引记录数据的基本格式
查看>>
SQL SERVER性能优化--分区表
查看>>
SQL SERVER 2005数据加密
查看>>
SQL SERVER性能分析--死锁检测数据库阻塞语句
查看>>
时间格式转换函数
查看>>
高效SQL查询之Graphical Execution Plans
查看>>
sql server性能分析--DMV之(sys.dm_exec_query_stats )
查看>>
高效SQL查询之索引覆盖(index coverage)
查看>>
高效SQL查询之索引(VI)
查看>>
高效SQL查询之索引(II)
查看>>
高效SQL查询之索引(I)
查看>>
高效SQL查询之索引(III)
查看>>
清空压缩数据表
查看>>
MSSQL添加字段说明
查看>>
SQL查表名、字段名、表说明、字段说明
查看>>
在SqlServer中用自定义函数返回动态表内容
查看>>
CONTAINS和FREETEXT
查看>>
深入探讨Truncate Table
查看>>