-7
int a=1,b=2,c=3;
int x=1;
int y=10;
a = x ? b : c;  
cout<< a;      // Outputs 2 (the value of b)
a = y ? b : c; 
cout<< a;      // Outputs 2 (the value of b)

では、以下を見てください。

a=0;
x=0;
a = x ? b : c;
cout<< a;  //   Outputs 3 (the value of c !!!!) 

なぜこの異常な動作?? a と x が両方とも 0 の場合のみ、式はfalseと評価され、それ以外の場合は常にtrueと評価されます。説明してください。

4

5 に答える 5

6

x0だから。

三項演算子は、書かれている場合は true をcondition ? a : b返し、そうでない場合は返すことを思い出してください。数値で使用しており、0 以外の数値はブール値と見なされます。aconditionbtrue

x ? b : cあなたの場合は is0 ? 2 : 3であり、0isfalseであるため、3 と評価されます。その 3 がa変数に割り当てられて出力されます。ここでは異常なことは何もありません。

于 2013-07-25T17:10:12.623 に答える
0
a = x ? b : c;

と同じです

if(x != 0) {
    a = b;
} else {
    a = c;
}

したがって、x = 0 と設定すると、a = c が得られます。

于 2013-07-25T19:05:11.650 に答える
0

「a」の値は、「x」と「y」の値にのみ依存します。最初は 'x' と 'y' は両方とも 0 より大きいため、条件は true と評価され、'a' の 'b' の値が得られます。2 番目のケースでは、'x' がゼロで、条件が false に評価され、'a' の値が 'c' になります。

于 2013-07-25T17:12:39.940 に答える