你对这个C ++表达式有什么期望?

时间:2012-08-30 08:31:46

标签: c++ visual-studio-2008 syntax ternary-operator

  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”

4 个答案:

答案 0 :(得分:7)

operator+的高度precedence高于三元运算符?:

所以,这相当于

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

因此,您有dSum == 1

答案 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

请参阅operator precedence

答案 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.

是的,我给了整个命令行,默认情况下