通过尝试,我开始知道有必要在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;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
42
42
1
Run Code Online (Sandbox Code Playgroud)
为什么这些括号必要?在两种情况下都知道条件运算符的结果类型,不是吗?
为什么三元运算符没有块?换句话说,为什么以下代码不起作用并报告{}大括号错误?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n")}:{printf("World\n")};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑
也许这个问题被误解了.原因是:为什么不支持块?为什么只有单一表达?
为什么不允许这样做?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n");printf("World\n");}:{printf("Bye\n");printf("World\n");};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一个原因可能是三元通常用于左侧的条件赋值,而块将没有这样的返回,或者它会与块内的多个语句混淆.