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 。请解释一下。
答案 0 :(得分:6)
因为x
为0。
回想一下,如果condition ? a : b
为真,则三位运算符a
返回condition
,否则返回b
。您将它与数字一起使用,除0之外的任何数字都被视为true
作为布尔值。
x ? b : c
为0 ? 2 : 3
,而且0
为false
,则评估为3.然后将3分配给您的a
变量并打印 - 没有什么不寻常的事情发生在这里。
答案 1 :(得分:4)
这看起来非常好。表达式a = x ? b : c
等同于
if (x)
a = b;
else
a = c;
对于任何非零值,答案 2 :(得分:0)
原因是在C和C ++中任何非零值都被评估为“true”。
答案 3 :(得分:0)
'a'的值仅取决于'x'和'y'的值。由于最初'x'和'y'都大于0,因此条件的计算结果为true,并且在'a'中得到'b'的值。 在第二种情况下,'x'为零,将条件评估为false,导致'a'的值为'c'。
答案 4 :(得分:0)
a = x ? b : c;
与
相同if(x != 0) {
a = b;
} else {
a = c;
}
因此,如果设置x = 0,您将获得a = c。