C++ - 逻辑操作符(&& , )应该注意的事_“逻辑运算的结果只能为true或者false(1)

{
    cout << "Result is false!" << endl;
}

cout << endl;
//逻辑或
if( func(0) || func(1) )  //如果if( func(1) || func(0) )func(0)不执行
{
    cout << "Result is true!" << endl;
}
else
{
    cout << "Result is false!" << endl;
}

return 0;

}


**结果:**



int func(int i) : i = 0
Result is false!

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


从结果看出逻辑操作符判断顺序从左到右(**但是实际的计算次序是不定的**),在下面的代码示例会验证。



**2.逻辑操作符重载**


代码示例:



#include
#include

using namespace std;

class Test
{
int mValue;
public:
Test(int v)
{
mValue = v;
}

int value() const   //const修饰的对象只能调用const修饰的成员函数
{
    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.value() = " << i.value() << endl;

return i;

}

int main()
{
Test t0(0);
Test t1(1);

if(operator&&(func(t0),func(t1)))     //函数调用形式
{  //func(t0)和func(t1)的值,且这两个的计算顺序不确定
    cout << "Result is true!" << endl;
}
else
{
    cout << "Result is false!" << endl;
}

cout << endl;

if(operator||(func(1), func(0)))    //函数调用形式
{
    cout << "Result is true!" << endl;
}
else
{
    cout << "Result is false!" << endl;
}

return 0;

}


结果:



Test func(Test i): i=1 函数都被调用,不符合原生语义的逻辑与&&(短路法则失效)
Test func(Test i): i=0
the result is false

Test func(Test i): i=0 函数都调用,不符合原生语义的逻辑或||(短路法则失效)
Test func(Test i): i=1
the result is true


结果分析:逻辑与(&&)的两个函数调用顺序反了,不符合原生顺序(左至右)。逻辑或也不是从左至右顺序!


函数参数的计算次序是不定的,短路法则完全失效。



**3.实际工作中遇到逻辑操作符的注意点**


## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/3a6b0a470a1d7c2e514c59469cc383e6.png)

![img](https://img-blog.csdnimg.cn/img_convert/f06e01359a2e83422e51faf2816a71f0.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/76ba58104e5701c93cb8c618585fbd92.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/aa91d62d8a214c5f5bfcc43ffe08f41f.png)

![img](https://img-blog.csdnimg.cn/img_convert/8988391b142951dea24844c5e3269822.png)

![img](https://img-blog.csdnimg.cn/img_convert/bc49a7d6e58434c60e3a8a526f3fc435.png)

![](https://img-blog.csdnimg.cn/img_convert/fa0dbbd336b9e5b799989b8227c97926.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.youkuaiyun.com/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!



[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.youkuaiyun.com/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值