【发布时间】:2018-01-21 15:47:01
【问题描述】:
为什么下面的表达式的值是假的?
bool a = false;
bool b= true;
std::cout<< a || !b && !a || b;
以及为什么加括号时值会发生变化
bool a = false;
bool b= true;
std::cout<< (a || !b && !a || b);
括号不应该这样放:
a || (!b && !a) || b
,结果是false 或false 或true 等于true?
【问题讨论】:
-
在any good beginners book 中了解operator precedence。请记住,
<<确实是 左移 运算符。 -
查看compiler warnings,您将获得该代码。
-
&& 的优先级高于 ||,因此该值应为 true。
-
看来您要么没有阅读或不了解 cmets。
<<的优先级更高,所以第一个代码被解释为(std::cout<< a) || !b && !a || b。 -
好的,我知道了,谢谢
标签: c++ boolean operators operator-precedence