圆括号在C ++中出现明显的语法错误,但编译器没有抱怨

时间:2016-03-02 09:38:52

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

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

double d=(4,5,6);

如果我调试它,d的值是6? 圆括号在这个表达式中意味着什么? 附: 我启用了C ++ 11

2 个答案:

答案 0 :(得分:2)

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

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

double d = 6;

答案 1 :(得分:2)

这是comma operator

  

在逗号表达式E1,E2中,评估表达式E1,其中   结果被丢弃,其副作用在之前完成   表达式E2的评估开始(注意用户定义的   操作员,不能保证测序。)

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