另一个条件运算符嵌套问题

根据C优先级表,三元条件运算符具有从右到左的关联性。

那么,它是否可以直接转换为等效的if-else梯形图?

例如,可以:

x?y?z:u:v; 

被解释为:

 if(x) { if(y) { z; } else { u; } } else { v; } 

通过匹配else(:)与最近的未配对if( ? )? 或者从右到左的相关性是否意味着其他一些安排?

您给出的示例只能以一种方式解释(如您给出的if语句),无论三元运算符是从右到左还是从左到右的关联性。

从右到左关联的重要性在于:

 x = a ? b : c ? d : e; 

这被解释为: x = a ? b : (c ? d : e) 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