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