1

MSVC v9.0 で、これを行うと:

int myvalue;
myvalue = true ? 1 : 0;

?:「=」の前に評価されるようです。これは保証ですか?この表を参照として使用しています: http://en.cppreference.com/w/cpp/language/operator_precedence

ただし、両方の演算子が同じ行にあるため、期待どおりの順序で評価されるかどうか、またはこれが標準で保証されているかどうかはわかりません。誰でもこれを明確にできますか?

4

4 に答える 4

7

この声明では

int myvalue = true ? 1 : 0;

演算子は三項演算子のみです。ここには代入演算子がないため、優先順位は関係ありません。

初期化と割り当てを混同しないでください。

int myvalue;
myvalue = true ? 1 : 0; // now priorities are important
于 2012-10-10T15:54:44.750 に答える
3

あなたのリンクから:

同じセル内にある演算子 (セルに複数の行の演算子がリストされている場合があります) は、指定された方向で同じ優先順位で評価されます。たとえば、式 a=b=c は、(a=b)=c としてではなく、a=(b=c) として解析されます。これは、右から左への結合のためです。

=との両方?:が同じセルにあり、右から左への結合性があるため、3 項が最初に評価されることが保証されます。

于 2012-10-10T15:57:56.767 に答える
0

右から左へ:

int myValue1 = 20, myValue2 = 30;

myValue1 = true ? 1 : 0; // which is the same as:
myValue1 = ((true) ? (1) : (0));

// myValue == 1 && myValue2 == 30

true ? myValue1 : myValue2 = 5; // which is the same as:
(true) ? (myValue1) : ((myValue2) = (5));

// myValue == 1 && myValue2 == 30

false ? myValue1 : myValue2 = 5; // which is the same as:
(false) ? (myValue1) : ((myValue2) = (5));

// myValue == 1 && myValue2 == 5

これはC++言語で保証されています

于 2012-10-10T16:02:03.677 に答える