根据C优先级表,三元条件运算符具有从右到左的关联性。
那么,它是否可以直接转换为等效的if-else阶梯?
例如,可以:
x?y?z:u:v;
被解释为:
if(x)
{
if(y)
{ z; }
else
{ u; }
}
else
{ v; }
通过匹配其他(:
)与最接近的未配对if(?
)?或者从右到左的关联性是否意味着其他一些安排?
您给出的示例只能以一种方式解释(如您给出的if语句),无论三元运算符是从右到左还是从左到右的关联性。
从右到左关联的重要性在于:
x = a ? b : c ? d : e;
这被解释为:x = a ? b : (c ? d : e)
,而不是x = (a ? b : c) ? d : e
。
举一个更现实的例子:
int getSign(int x) {
return x < 0 ? -1 :
x > 0 ? 1 :
0;
}
这与(可能更具可读性)if / else-if语句相同:
int getSign(int x) {
if (x < 0)
return -1;
else if (x > 0)
return 1;
else return 0;
}
你的假设是正确的;然而,为了便于阅读,在括号中加上通常是明智的,例如:
x ? ( y ? z : u ) : v