通过尝试,我知道有必要在 cout 语句中的条件运算符周围加上括号。这里有一个小例子:
#include <iostream>
int main() {
int a = 5;
float b = (a!=0) ? 42.0f : -42.0f;
// works fine
std::cout << b << std::endl;
// works also fine
std::cout << ( (a != 0) ? 42.0f : -42.0f ) << std::endl;
// does not work fine
std::cout << (a != 0) ? 42.0f : -42.0f;
return 0;
}
输出是:
42
42
1
为什么需要这些括号?条件运算符的结果类型在这两种情况下都是已知的,不是吗?
原文由 m47h 发布,翻译遵循 CC BY-SA 4.0 许可协议
?:
运算符的优先级低于<<
运算符,即编译器将您的最后一条语句解释为:这将首先将
(a!=0)
的布尔值流式传输到 cout。然后,该表达式的结果(即对 cout 的引用)将被转换为适当的类型以用于 ?: 运算符(即void*
:参见 cplusplus.com ),并取决于该值是否为真(即,cout 是否没有设置错误标志),它将获取值 42 或值 -42。最后,它会丢弃该值(因为没有人使用它)。