目录
一.踩坑
今天在编如下代码的时候:
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 2, c = 3, d = 0;
if (a == 1 && b++ == 2)
if (b != 2 || c-- != 3)
cout << a << '\t' << b << '\t' << c << endl;
else
cout << a << '\t' << b << '\t' << c << endl;
return 0;
}
本来预计的结果是:
1 3 2
但是结果是:
1 3 3
于是我开始了debug之路,后面发现了原因出在||处,
对于b != 2 || c-- != 3,左侧b的值为3,不为2,||左侧已经为true了,故不再对右侧进行操作。
所以有了这篇博客。
二.&和&&、|和||的区别
1.介绍
&和|称为布尔运算符,&&和||称为条件布尔运算符。
其中,&和&&两边为true则为true,一边为false则为false;|和||两边为false则为false,一边为true则为true。
2.区别
对于&&运算时,若左边为false,则结果为false,不再考虑右侧的操作数,即若&&左边为false,则不对&&右边的表达式进行操作。
对于||运算时,若左边为true,则结果为true,不再考虑右侧的操作数,即若&&左边为true,则不对||右边的表达式进行操作。
对于&和|来说,它们总是需要计算左右两个操作数。
注:&和|还可用作位运算,详情可见:位运算。
3.总结
相比&和|来说,使用&&和||对程序性能会有所提高,特别是在大量使用时感受尤为明显,故在实际开发中,我们应该尽量使用&&和||代替&和|。