[英]Order of evaluation for ternary operator in C
我知道根据标准, fun(++a, a)
应该避免,因为第二个参数没有很好地定义。
但是,这种配方是否安全:
(++a ? a : 10);
我测试了这个片段,它按预期工作,即对于a = -1
它评估为10
,对于任何其他a
它评估为a+1
。 这是在标准中明确定义的,还是强烈依赖于编译器?
这是很好定义的。
在三元表达式中,首先计算第一部分。 然后根据该值,评估第二部分或第三部分。 所以++a
保证在a
可能被评估之前被评估。
C 标准的第 6.5.15p4 节对此进行了解释:
评估第一个操作数; 在它的求值和第二个或第三个操作数的求值之间有一个序列点(以求值者为准) 。 仅当第一个比较不等于 0 时才计算第二个操作数; 仅当第一个比较等于 0 时才评估第三个操作数; 结果是第二个或第三个操作数的值(以评估的为准),转换为下面描述的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.