【问题标题】:Round bracket apparent syntactic error in C++ but compiler not complainingC ++中的圆括号明显的语法错误,但编译器没有抱怨
【发布时间】:2016-03-02 09:38:51
【问题描述】:

为什么编译器 (g++-4.9) 没有抱怨这种表示法?

double d=(4,5,6);

如果我调试它,d 的值是6? 这个表达式中的圆括号是什么意思? 附言 我已启用 C++11

【问题讨论】:

    标签: c++ compiler-errors g++


    【解决方案1】:

    这使用逗号运算符,它(不重载)只计算左侧表达式,丢弃结果,并返回右侧表达式的结果。

    由于表达式45 没有副作用,您的代码相当于:

    double d = 6;
    

    【讨论】:

      【解决方案2】:

      这是comma operator

      在逗号表达式 E1, E2 中,表达式 E1 被求值,它的 结果被丢弃,它的副作用在之前完成 表达式 E2 的计算开始(请注意,用户定义的 运算符,不能保证排序)。

      对于(4,5,6),首先计算表达式4,忽略它的返回值并完成任何副作用(这里确实没有),然后对5做同样的事情,然后计算最后一个表达式6,返回此评估的类型和结果。

      【讨论】:

        猜你喜欢
        • 2011-01-08
        • 2020-08-29
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 2013-05-03
        • 2010-12-14
        • 2019-11-16
        • 2023-01-27
        相关资源
        最近更新 更多