第三十八课:逻辑操作符的陷进----狄泰软件学院

文章内容来源于狄泰软件学院唐老师C++课程课件。
一、潜规则

  1. 操作数只有两种值(true和false)
  2. 逻辑表达式不用完全计算就能确定最终值
  3. 最终结果只能是true或者是false

二、

#include<iostream>
#include<string>
using namespace std;

int func(int i)
{
	cout<<"int func(int i):i== "<<i<<endl;
}
int main()
{
	if(func(0)&&func(1))
	{
		cout<<"Result is true"<<endl;
	}
	else
	{
		cout<<"Result is false"<<endl;
	}	
	cout<<endl;
	if(func(0)||func(1))
	{
		cout<<"Result is true"<<endl;
	}
	else
	{
		cout<<"Result is false"<<endl;
	}
}
int func(int i):i== 0
Result is false

int func(int i):i== 0
int func(int i):i== 1
Result is true

三、逻辑操作符可以重载吗?重载逻辑操作符有什么意义?

#include<iostream>
#include<string>
using namespace std;

class Test
{
	int mValue;
public:
	Test(int v)
	{
		mValue=v;
	}
	int value() const//bei const diaoyong
	{	
		return mValue;
	}
};

bool operator &&(const Test&l,const Test& r)
{
	return l.value()&&r.value();
}

bool operator ||(const Test&l,const Test& r)
{
	return l.value()||r.value();
}

Test func(Test i)
{
	cout<<"Test func(Test i):i== "<<i.value()<<endl;
	return i;
}
int main()
{
	Test t0(0);
	Test t1(1);
	if(func(t0)&&func(t1))
	{
		cout<<"Result is true"<<endl;
	}
	else
	{
		cout<<"Result is false"<<endl;
	}	
	cout<<endl;
	cout<<endl;
	if(func(t0)||func(t1))
	{
		cout<<"Result is true"<<endl;
	}
	else
	{
		cout<<"Result is false"<<endl;
	}	
	cout<<endl;
}
Test func(Test i):i== 1
Test func(Test i):i== 0
Result is false


Test func(Test i):i== 1
Test func(Test i):i== 0
Result is true
结果:
&& 和||都被调用了两次,且先调用t1,这与我们所理解的不一样

四、问题的本质

  1. C++通过函数调用扩展操作符的功能
  2. 进入函数体前必须完成所有参赛的计算
  3. 参数的计算次序是不定的
  4. 短路法则完全失效

换成函数调用的方式:

	if(opertator &&(func(t0)&&func(t1))),函数调用,则进入函数调用之前,参数需要确定。

五、一些有用的建议

  1. 实际工程开发中避免重载逻辑操作符
  2. 通过重载比较操作符代替逻辑操作符重载
  3. 直接使用成员函数代替逻辑操作符重载
  4. 使用全局函数对逻辑操作符进行重载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值