为什么编译器(g ++ - 4.9)没有抱怨这种表示法?
double d=(4,5,6);
如果我调试它,d
的值是6
?
圆括号在这个表达式中意味着什么?
附:
我启用了C ++ 11
答案 0 :(得分:2)
这使用逗号运算符,它(不重载)只计算左手表达式,抛弃结果,并返回右手表达式的结果。
由于表达式4
和5
没有副作用,因此您的代码相当于:
double d = 6;
答案 1 :(得分:2)
在逗号表达式E1,E2中,评估表达式E1,其中 结果被丢弃,其副作用在之前完成 表达式E2的评估开始(注意用户定义的 操作员,不能保证测序。)
对于(4,5,6)
,首先评估表达式4
,忽略它的返回值并完成任何副作用(这里确实没有),然后对5
执行相同的操作,然后评估最后一个表达式6
,返回此评估的类型和结果。