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;

dSum1.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 に答える