根据C优先级表,三元条件运算符从右到左 结合性。
那么,它是否可以直接转换为等效的if-else阶梯?
例如,可以:
x?y?z:u:v;
被解释为:
if(x)
{
if(y)
{ z; }
else
{ u; }
}
else
{ v; }
将else(:
)与最近的未配对if(?
)匹配?或者从右到左的相关性是否意味着其他一些安排呢?
答案 0 :(得分:15)
您提供的示例只能以一种方式解释(如您给出的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;
}
答案 1 :(得分:6)
你的假设是正确的;但是,为了便于阅读,添加括号通常是明智的,例如:
x ? ( y ? z : u ) : v