为什么不要重载&&和||操作符

转载 2016年09月24日 07:10:15

理论知识:

1&&和||是C++中非常特殊的操作符

2&&和||内置实现了短路规则

3)操作符重载是靠函数重载来完成的

4)操作数作为函数参数传递

5C++的函数参数都会被求值,无法实现短路规则

测试案例:

#include <cstdlib>
#include <iostream>

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.operator&&(   t1 + t2)  )
		//T1.operator&&(   t1.operator+(t2) )
		//t1  && t1.operator+(t2)  
		// t1.operator(  t1.operator(t2)  )   
		cout<<"两个函数都被执行了,而且是先执行了+"<<endl;
	}

	system("pause");
	return ;
}

总结:我们可以实现&&和|| 操作符重载,但我们无法实现短路规则,因此不要重载&&和||


js模仿重载机制

JavaScript支持方法的重写,但是没有方法重载机制,那么可以模仿重载机制吗?答案是肯定的。 利用全局变量arguments可以实现,arguments是类数组,通过判断传入参数的长度可以访问到...
  • aionbo
  • aionbo
  • 2016年12月24日 16:44
  • 252

运算符重载 [++,--,+,<<; &&,||(不可重载)]

运算符重载就是运算符的“”
  • yeswenqian
  • yeswenqian
  • 2014年06月29日 21:33
  • 1537

为什么不要重载 && 和 || 操作符!!!

详细解释为什么重载运算符时,不对 && 和 || 这两个运算符进行重载;通过demo可以发现原因是重载这两个操作符不能实现它们原本的短路效果,所以我们尽量不对这两个运算符进行重载。...
  • zyq522376829
  • zyq522376829
  • 2015年06月14日 21:25
  • 424

C++类模板&amp;&amp;容器&amp;&amp;重载

  • 2014年06月10日 09:36
  • 2.65MB
  • 下载

从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(二)class与struct, 构造函数,重载函数

一、Class与Struct class是C++的特性,而struct则是沿用自C。通常意义上来说,我们认为struct仅仅是用来存放一些数据的集合,而不包含成员函数。这个理解是简单的,也建议初学cl...
  • u011497904
  • u011497904
  • 2015年03月13日 11:21
  • 557

C++函数的高级特性-函数重载

 对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与v...
  • sendy888
  • sendy888
  • 2007年08月11日 22:05
  • 9106

不要重载&& ||和,操作符

首先,我们来说一下为什么不要重载&&与|| &&与|| 具有骤死式语意。即(在第一个条件为真时 || 即为真,不会判断第二个条件) 假设你重载了&& 则当你调用的时候会出现这种情况 if(a1 ...
  • qq_37185716
  • qq_37185716
  • 2017年07月27日 20:09
  • 78

C++类—重载操作符

重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号。如: [cpp] view plaincopy Sales_item o...
  • xietingcandice
  • xietingcandice
  • 2014年09月29日 16:13
  • 858

c++ 逗号操作符重载

Overload Operator Comma 首先看看think in c++ 给出的一个重载的例子 #include using namespace std; class After { ...
  • x356982611
  • x356982611
  • 2016年04月05日 12:32
  • 1644

重载内核(x86)

#include #include #include #include #include #include #include #ifndef MAX_PATH #define MAX_...
  • qq125096885
  • qq125096885
  • 2016年11月17日 17:09
  • 434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为什么不要重载&&和||操作符
举报原因:
原因补充:

(最多只允许输入30个字)