为什么编译器(g ++ - 4.9)不会抱怨这种表示法?在C++中,圆括号明显出现语法错误,但编译器不抱怨
double d=(4,5,6);
,如果我调试它的d
值6
? 这个表达式中的圆括号是什么意思? P.S. 我已经启用C++ 11
为什么编译器(g ++ - 4.9)不会抱怨这种表示法?在C++中,圆括号明显出现语法错误,但编译器不抱怨
double d=(4,5,6);
,如果我调试它的d
值6
? 这个表达式中的圆括号是什么意思? P.S. 我已经启用C++ 11
这使用逗号运算符,该运算符(没有重载)只计算左手表达式,抛出结果并返回右手表达式的结果。
由于表达4
和5
有没有副作用,你的代码就相当于:
double d = 6;
在逗号表达E1,E2,表达E1进行评价时,其 结果被丢弃,并且之前的表达E2开始的 评价(注意,一个用户定义的 操作者它的副作用都完成后,不能保证排序)。
对于(4,5,6)
,首先评估表达4
,无视它的返回值,(这里没有确实)完成任何副作用,然后做同样的事情与5
,然后评估最后的表达6
,返回类型和评估结果。