我们可以写一个if
语句为
if (a == 5, b == 6, ... , thisMustBeTrue)
只有最后一个条件才能进入if
正文。
为什么允许?
最佳答案
稍微改变你的例子,假设是这样
if ( a = f(5), b = f(6), ... , thisMustBeTrue(a, b) )
(注意 =
而不是 ==
)。在这种情况下,逗号保证了从左到右的评估顺序。相比之下,与此
if ( thisMustBeTrue(f(5), f(6)) )
你不知道 f(5)
是在 f(6)
之前还是之后调用的。
更正式地说,逗号允许您编写表达式 (a,b,c)
的序列,就像使用 ;
编写一系列语句 a;乙; c;
。
就像 ;
创建一个 sequence point (完整表达结束)逗号也是如此。只有序列点控制评估的顺序,见 this post .
当然,在这种情况下,你实际上会写这个
a = f(5);
b = f(6);
if ( thisMustBeTrue(a, b) )
那么,什么时候逗号分隔的表达式序列优于 ;
分隔的语句序列?我几乎不会说。当您希望右侧替换为单个表达式时,也许在宏中。
关于c++ - 条件语句中的逗号有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561882/