c++ - 条件语句中的逗号有什么好处?

标签 c++ if-statement

我们可以写一个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/

相关文章:

c++ - 使用 boost 库在队列和堆栈数据结构上保存和加载数据时出错

c++ - 要执行的目标文件的动态加载

c++ - const 限定符和数组

python-2.7 - 机器人框架中的 If Else-if

c++ - 对于先前分配的 vector ,为什么 push_back 比 operator[] 慢

c++ - std::nothrow 未按预期工作 - 条件始终为假

symfony - Twig 和 bool 值

mysql - 如何在LIMIT mysql中加入if else条件

windows - XP 上的 dos 批处理文件中的变量未正确设置

javascript - 链接逻辑运算符在 javaScript 中给出错误结果