【问题标题】:What is this strange conditional operator syntax?这种奇怪的条件运算符语法是什么?
【发布时间】:2012-07-29 05:58:24
【问题描述】:

我最近在代码库中看到了以下内容:

bool bRes = (a < b) ? a=b, true : false;

如果a &lt; b,则a=b 被执行并且bRes 为真。 这里到底发生了什么?条件运算符的文档没有提到任何关于链接表达式的内容。

编辑:要明确的是,我得到了条件运算符部分,这是 a=b, true 作为一个让我感到困惑的表达式。

【问题讨论】:

    标签: c++ conditional-operator


    【解决方案1】:

    哇。这是comma operator 的用法。 a=b, true 完全按照你说的做。它执行每个表达式并得出最后一个表达式的值。

    【讨论】:

    • +1 哈哈哈......你还没有看到真正的“eww”使用逗号运算符。我最喜欢的是Subbotin's carryless range coder。只看这条线不到 30 秒,然后试着解释发生了什么。
    【解决方案2】:

    这是一个正确的代码,但写的风格很奇怪。该语言允许以这种方式使用逗号运算符。

    等价于

    bool bRes;
    if (a < b)
    {
     a = b;
     bRes = true;
    }
    else
     bRes = false;
    

    【讨论】:

    • 这是写相同内容的更好方法。干得好!
    • 但现在是赋值而不是初始化。在原始代码中,我们很可能已经将bRes 声明为const...
    • @KerrekSB:好点。 const bool bRes = a &lt; b; if (bRes) a = b; 怎么样?
    • @Andrey:更好!应不惜一切代价避免使用任何bool w = condition ? true : falseif-等价于您的示例的代码。
    • @Andrey:我之前的评论一般是关于在初始化程序中使用逗号运算符;我同意这个特殊的例子已经够丑了。
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2021-01-12
    • 2013-03-13
    相关资源
    最近更新 更多