我们可以写一个if
声明为
if (a == 5, b == 6, ... , thisMustBeTrue)
并且只有满足最后一个条件才能进入if
body.
为什么允许?
稍微改变一下你的例子,假设是这样的
if ( a = f(5), b = f(6), ... , thisMustBeTrue(a, b) )
(注意=
代替==
)。在这种情况下,逗号保证了从左到右的求值顺序。相比之下,与此
if ( thisMustBeTrue(f(5), f(6)) )
你不知道是否f(5)
在之前或之后调用f(6)
.
更正式地说,逗号允许你写一个sequence表达式的数量(a,b,c)
以同样的方式你可以使用;
编写一系列语句a; b; c;
。
并且就像一个;
创建一个序列点 https://en.wikipedia.org/wiki/Sequence_point(完整表达的结尾)逗号也是如此。只有序列点控制评估顺序,请参阅这个帖子 https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points.
但当然,在这种情况下,你实际上会写这个
a = f(5);
b = f(6);
if ( thisMustBeTrue(a, b) )
那么什么时候用逗号分隔的表达式序列比;
分开的语句序列?我几乎从来不会说。也许在宏中,当您希望右侧替换为单个表达式时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)