以相反顺序打印表达式时得到不同的结果
Getting different result when printing expression written in reverse order
为什么我在第 3 行得到不同的结果?
输出是:
1
1
0
1
我不应该在第 1 行收到吗? 3 还输出1
而不是0
?它的语法与其他行相同。
#include <iostream>
using namespace std;
int main()
{
int x = -3;
bool a = (x % 2 == 1) || (x < 0);
bool b = (x < 0) || (x % 2 == 1);
cout << a << "\n"; // line 1
cout << b << "\n"; // line 2
cout << (x % 2 == 1) || (x < 0); cout << "\n"; // line 3
cout << (x < 0) || (x % 2 == 1); cout << "\n"; // line 4
}
因为operator precedence,operator<<
比operator||
高,只有
(x % 2 == 1)
部分已打印。剩下的就像做cout || (x < 0);
。 (请注意,std::cout
,与任何其他 std::basic_ios
派生流一样,可以隐式转换为 bool
)
加上括号,看起来像这样:
(cout << (x % 2 == 1)) || (x < 0);
第 4 行打印了 1
,因为 (x < 0)
为真并且您切换了操作数 - 现在应该清楚了。
解决方案: 将 operator||
调用括起来:
cout << (x % 2 == 1 || x < 0);
另一方面,operator||
操作数周围的括号是多余的。
为什么我在第 3 行得到不同的结果? 输出是:
1
1
0
1
我不应该在第 1 行收到吗? 3 还输出1
而不是0
?它的语法与其他行相同。
#include <iostream>
using namespace std;
int main()
{
int x = -3;
bool a = (x % 2 == 1) || (x < 0);
bool b = (x < 0) || (x % 2 == 1);
cout << a << "\n"; // line 1
cout << b << "\n"; // line 2
cout << (x % 2 == 1) || (x < 0); cout << "\n"; // line 3
cout << (x < 0) || (x % 2 == 1); cout << "\n"; // line 4
}
因为operator precedence,operator<<
比operator||
高,只有
(x % 2 == 1)
部分已打印。剩下的就像做cout || (x < 0);
。 (请注意,std::cout
,与任何其他 std::basic_ios
派生流一样,可以隐式转换为 bool
)
加上括号,看起来像这样:
(cout << (x % 2 == 1)) || (x < 0);
第 4 行打印了 1
,因为 (x < 0)
为真并且您切换了操作数 - 现在应该清楚了。
解决方案: 将 operator||
调用括起来:
cout << (x % 2 == 1 || x < 0);
另一方面,operator||
操作数周围的括号是多余的。