int func(int i)
{
cout << "int func(int i) : i = " << i << endl;
return i;
}
int main()
{
//逻辑与
if( func(0) && func(1) ) //func(1)没有执行
{
cout << “Result is true!” << endl;
}
else
{
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
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!