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"
operator+
三項演算子よりも優先順位が高くなり?:
ます。
したがって、これは
double dSum = ( 1 + bSwitch ) ? 1 : 2;
したがって、 がありますdSum == 1
。
優先事項ですよね。
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.
はい、コマンドライン全体を指定しました。デフォルトでオンになっています。