-1
int  a = 5;
if(a = 5)
{
    cout<<"111111"<<endl;
}
if(a = 0)
{
    cout<<"22222"<<endl;
}

結果は

111111 続行するには何かキーを押してください

いくつかのコメントに基づいて、成功を割り当て、結果は true です。</p>

「a = 0」および「a = 1」は成功を割り当てる必要がありますが、結果は最初に実行されたものだけです....

なぜ ?

4

3 に答える 3

6

いくつかのコメント?それは危険に思えますが、この場合は正しくありません。

operator=on sの結果はint、割り当てられた値です。この場合、a = 5結果は 0になります。5a = 05true0false

割り当てによって値が割り当てられる理由については、複数の割り当てがある場合を考えてみましょう。

a = b = 5;

これは次と同じです。

a = (b = 5);

したがって、これが期待どおりに機能するには、(b = 5)5 を返す必要があります。

于 2012-07-15T03:25:40.140 に答える
5

isの結果とa=5is5の結果なので、プログラムは次のようになります。a=00

int a = 5;
if(5)
{
    cout<<"111111"<<endl;
}
if(0)
{
    cout<<"22222"<<endl;
}

if ステートメントはブール値を必要とするため、暗黙的に5変換trueおよび0変換します。falseしたがって、プログラムは次のようになります。

int a = 5;
if(true)
{
    cout<<"111111"<<endl;
}
if(false)
{
    cout<<"22222"<<endl;
}

したがって、「111111」のみが出力されます。

"いくつかのコメントに反して,代入成功,結果は true " 代入の結果は左辺の式の結果です。

于 2012-07-15T04:10:43.883 に答える
0

「a = 0」および「a = 1」は成功を割り当てる必要がありますが、結果は最初に実行されたものだけです....

いいえ。0は間違っています。

if(0) { /* some code which will never execute */ }

このifステートメントは、括弧内のの結果を評価します。つまり、条件をチェックする前に、式自体を完全に評価する必要があります。

于 2012-07-15T03:41:02.813 に答える