bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
所以“dSum”是:
a)=1
b)=2
c)=3
结果太荒谬了,我为此受到了抨击......
我正在使用 VS2008 ->“Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 15.00.21022.08 für 80x86”
bool bSwitch = true;
double dSum = 1 + bSwitch?1:2;
所以“dSum”是:
a)=1
b)=2
c)=3
结果太荒谬了,我为此受到了抨击......
我正在使用 VS2008 ->“Microsoft (R) 32-Bit C/C++-Optimierungscompiler Version 15.00.21022.08 für 80x86”
这是一个优先的事情不是它。
bool bSwitch = true;
double dSum = (1 + bSwitch)?1:2;
dSum
将是 1.0
在操作员周围有合理的间距会更容易被发现。
我会期望1.
,因为+
运算符优先于三元运算符。所以表达式被读作
double dSum = (1 + bSwitch) ? 1:2;
并且1 + bSwitch
是非零的,因此它的计算结果为true
。
请参阅运算符优先级。
显然是一个警告,但我使用的是真正的编译器:
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.
是的,我给出了整个命令行,默认情况下它是打开的。