C++中逻辑表达式是短路计算的,即对逻辑表达式的计算,在整个表达式的值已经能够判定的时候就会停止。
exp1 && exp2:如果已经算出表达式exp1为假,则整个表达式的值为假,那么exp2就不会再计算。
exp1 || exp2:如果已经算出表达式exp2为真,则整个表达式的值为真,那么exp2也不会再计算。
下面看个简单的例子:
#include <iostream>
using namespace std;
int main()
{
int a = 0, b = 1;
bool m = (a++) && (b++);
//表达式a++的值为a原本的值0,所以表达式确定为假,b++不会被执行
cout << a << "," << b << endl;//输出1,1
m = a++ && b++;
//a++与b++都执行
cout << a << "," << b << endl;//输出2,2
m = a++ || b++;
//同理,表达式a++确定为真,b++不会被执行
cout << a << "," << b << endl;//输出3,2
return 0;
}
运行结果: