4
  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”

4

4 回答 4

7

operator+具有比三元运算符更高的优先级?:

所以,这相当于

double dSum = ( 1 + bSwitch ) ? 1 : 2;

因此,您有dSum == 1.

于 2012-08-30T08:36:14.477 回答
3

这是一个优先的事情不是它。

bool bSwitch  = true;
double dSum = (1 + bSwitch)?1:2;

dSum将是 1.0

在操作员周围有合理的间距会更容易被发现。

于 2012-08-30T08:34:35.783 回答
3

我会期望1.,因为+运算符优先于三元运算符。所以表达式被读作

double dSum = (1 + bSwitch) ? 1:2;

并且1 + bSwitch是非零的,因此它的计算结果为true

请参阅运算符优先级

于 2012-08-30T08:36:24.540 回答
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.

是的,我给出了整个命令行,默认情况下它是打开的。

于 2012-08-30T11:08:22.827 回答