另一个条件运算符嵌套问题
根据 C 优先级表,三元条件运算符具有从右到左的优先级 关联性。
那么,它是否可以直接转换为等效的 if-else 梯形图?
例如,可以:
x?y?z:u:v;
被解释为:
if(x)
{
if(y)
{ z; }
else
{ u; }
}
else
{ v; }
通过将 else (:
) 与最接近的未配对 if (?
) 相匹配?或者从右到左的关联性是否意味着其他的排列?
As per C precedence tables, the ternary conditional operator has right-to-left
associativity.
So, is it directly convertible to the equivalent if-else ladder?
For example, can:
x?y?z:u:v;
be interpreted as:
if(x)
{
if(y)
{ z; }
else
{ u; }
}
else
{ v; }
by matching an else (:
) with the closest unpaired if (?
)? Or does right-to-left associativity imply some other arrangement?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您给出的示例只能以一种方式解释(如您给出的 if 语句),无论三元运算符具有从右到左还是从左到右的关联性。
从右到左的关联性重要的是当你有:
被解释为:
x = a ? b : (c ? d : e)
,而不是x = (a ? b : c) ? d:e
。举一个更现实的例子:
这与(可能更易读)if / else-if 语句相同:
The example you gave could only be interpreted in one way (like the if statements you gave), whether the ternary operator had right-to-left or left-to-right associativity.
Where the right-to-left associativity matters is when you have:
Which is interpreted as:
x = a ? b : (c ? d : e)
, not asx = (a ? b : c) ? d : e
.To give a more realistic example:
This is identical to the (probably more readable) if / else-if statements:
你的假设是正确的;然而,为了可读性添加括号通常是明智的,例如:
Your assumption is correct; however, it is often wise to add in parentheses for readability, e.g.: