结论:两者都是从左到右进行运算,且一旦能够得到结果,右边的表达式就不会被调用。验证如下:
bool expr1(bool lhs)
{
cout << "expr1 called" << endl;
return lhs;
}
bool expr2(bool rhs)
{
cout << "expr2 called" << endl;
return rhs;
}
int main()
{
expr1(1 > 2) && expr2(1 < 2); //两者都只调用了表达式1,因为有了表达式1就能够得到结果了
expr1(1 < 2) || expr2(1 > 2);
expr1(1 < 2) && expr2(1 > 2); //两者都调用了表达式2,因为前者不足以判断出结果,得通过第二个表达式来判断
expr1(1 > 2) || expr2(1 > 2);
}