为什么以下表达式的值为false?
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
?
答案 0 :(得分:0)
正如评论中已经提到的,在第一种情况下,表达式归因于operator precedence被评估为
(std::cout << a) || !b && !a || b;
std::cout << a
的结果是std::cout
对象本身的引用,它在C ++ 03中可转换为从bool
继承的operator void*()
到std::basic_ios
。在C ++ 11中,有operator bool()
代替,它允许所谓的上下文转换。
因此,其余部分只是一个布尔表达式,其结果将被丢弃。