bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
所以“dSum”是:
a)= 1
b)= 2
C)= 3
结果很荒谬,我被砸了......
我正在使用VS2008 - > “Microsoft(R)32位C / C ++ - Optimierungscompiler版本15.00.21022.08,用于80x86”
答案 0 :(得分:7)
答案 1 :(得分:3)
这不是优先事项。
bool bSwitch = true;
double dSum = (1 + bSwitch)?1:2;
dSum
将为1.0
在操作员周围使用合理的间距会更容易发现。
答案 2 :(得分:3)
我希望1.
,因为+
运算符优先于三元运算符。所以表达式读作
double dSum = (1 + bSwitch) ? 1:2;
且1 + bSwitch
不为零,因此评估为true
。
答案 3 :(得分:1)
void foo() {
bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
}
给出:
$ clang++ -fsyntax-only test.cpp
test.cpp:3:28: warning: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Wparentheses]
double dSum = 1 + bSwitch?1:2;
~~~~~~~~~~~^
test.cpp:3:28: note: place parentheses around the '+' expression to silence this warning
double dSum = 1 + bSwitch?1:2;
^
( )
test.cpp:3:28: note: place parentheses around the '?:' expression to evaluate it first
double dSum = 1 + bSwitch?1:2;
^
( )
1 warning generated.
是的,我给了整个命令行,默认情况下 。