【发布时间】:2016-03-02 09:38:51
【问题描述】:
为什么编译器 (g++-4.9) 没有抱怨这种表示法?
double d=(4,5,6);
如果我调试它,d 的值是6?
这个表达式中的圆括号是什么意思?
附言
我已启用 C++11
【问题讨论】:
标签: c++ compiler-errors g++
为什么编译器 (g++-4.9) 没有抱怨这种表示法?
double d=(4,5,6);
如果我调试它,d 的值是6?
这个表达式中的圆括号是什么意思?
附言
我已启用 C++11
【问题讨论】:
标签: c++ compiler-errors g++
这使用逗号运算符,它(不重载)只计算左侧表达式,丢弃结果,并返回右侧表达式的结果。
由于表达式4 和5 没有副作用,您的代码相当于:
double d = 6;
【讨论】:
在逗号表达式 E1, E2 中,表达式 E1 被求值,它的 结果被丢弃,它的副作用在之前完成 表达式 E2 的计算开始(请注意,用户定义的 运算符,不能保证排序)。
对于(4,5,6),首先计算表达式4,忽略它的返回值并完成任何副作用(这里确实没有),然后对5做同样的事情,然后计算最后一个表达式6,返回此评估的类型和结果。
【讨论】: