C++中如下多个条件表达式嵌套的语句怎么理解?

来源:百度知道 编辑:UC知道 时间:2024/05/27 07:27:14
#include <iostream.h>
void main( )
{
int a=3,b=4,c;
c=a-b?a-3?b:b-a:a;
cout<<a<<","<<b<<","<<c<<endl;
}

c=a-b?a-3?b:b-a:a;
是说这一句吧?
这是一个条件运算符的语句;包含两个条件运算符和一个赋值运算符。
从两个方面来解释:运算符优先级,运算符结合性。

优先级:条件运算符高于赋值运算符,二者的结合性都是从右向左。
上面的语句相当于:c=a-b?(a-3?b:b-a):a;

即按照结合性,先计算右面的条件运算表达式;再按照优先级,赋值。
结果是3,4,1

c=(a-b)?(a-3?b:b-a):a;

==============================

写成这样你就好理解了

先判断a-b 不为0 即c= 分号前面的(a-3?b:b-a)

这里 a-3为0 所以表达式的值为b-a=1 所以()的值为1 那c的值就是1了

随意输出3 4 1

晕,这个表达式好怪异.

a-3?b:b-a 先算这个,如果a-3为真,那么表达式的值为b否则是b-a 因为a=3,b=4,所以a-3为假,b-a的值为1,所以这个表达式的值为1

a-b?1:a 如果a-b为真,则表达式的值为1,否则为a的值.a-b得-1,为真,最后表达式的值为1。
c=1;

最后的输出结果为:3,4,1

多重条件表达式计算顺序为自右往左。