我发现(true && false)给出0,而true && false(没有括号)给出1。 这个问题可能很愚蠢,因为我刚刚开始学习C ++,但是我在任何地方都找不到答案。
我运行了以下内容:
cout << (true && false) << '\n';
cout << true && false << '\n';
cout << (true && false == true);
它给了我
0 10
看到这个之后,我变得更加困惑:
(true && false)
和true && false
(不带括号)之间有什么区别?true && false
给了我1
,所以我认为没有括号的true && false
是true
。但是,(true && false == true)
给了我0
。为什么?是因为0
和1
不一定表示false
和true
吗?'\n'
似乎不起作用。为什么?答案 0 :(得分:5)
如table of operator precedence所示,<<
的优先级为7,&&
的优先级为14
结果,表达式cout << true && false << '\n';
可以重写为:
(cout << true) && (false << '\n');
计算结果为:
(cout << true) // Output: "1"; Evaluates to an ostream-object.
(false << '\n') // No output; Evaluates to 0, the '\n' "disappears"
[ostream-object] && 0; // No output; Evaluates to 0
答案 1 :(得分:2)
cout << true && false << '\n';
与
相同
(cout << true) && (false << '\n');
true
(1)被流传输到cout
,返回对该流的引用。
&&
false
(0)左移\n
(10)位,结果为0。
该流现在处于布尔上下文中(由于&&
),由于其仍处于良好状态,因此将通过其转换运算符true
进入operator bool ()
。
我们剩下true && 0
,结果为false
。
(cout << true) && (false << '\n') ==
(cout << true) && (false << 10) == // right side: 0 << 10
(cout << true) && 0 => // true is sent out here
bool(cout) && 0 =>
true && 0
false
答案 2 :(得分:2)
&&
的优先级低于<<
和==
,因此代码的行为如下:
cout << (true && false) << '\n';
(cout << true) && (false << '\n');
cout << (true && (false == true));
在第一行中,您在对与错。 在第二行中,您正在传输true,并将false换行符的ascii值左移(无效)。 在第三行中,您正在测试false是否等于true,这将得出false。