Dzy*_*ann 4 c++ comma-operator
我在Visual Studio 2012中使用C++(而不是C++/CLI).
我不明白为什么这段代码有效,我原本以为它会在编译时失败,但它在运行时甚至都不会失败:
double MyClass::MyMethod() const
{
//some code here
return (10, 20, 30, 40);
}
Run Code Online (Sandbox Code Playgroud)
我错误地制作了这段代码,不是故意的,我在运行单元测试时注意到了这个错误.我很惊讶它有效.当我运行它时,它返回40,列表中的最后一个数字.
有人能解释一下这种语法的含义及其工作原理吗?
这是使用逗号运算符,它将从左到右评估每个表达式,但只返回最后一个.如果我们查看草案C++标准部分的5.18 逗号运算符,它会说:
用逗号分隔的一对表达式从左到右进行评估; 左表达式是废弃的值表达式(第5条).83在与右表达式相关的每个值计算和副作用之前,对与左表达式相关联的每个值计算和副作用进行排序.
链接文章最常见的用途是:
允许多个赋值语句而不使用块语句,主要是在for循环的初始化和增量表达式中.
这个以前的线程C逗号运算符的使用有一些非常有趣的例子,说明如果你真的很好奇,人们如何使用逗号运算符.
启用警告这总是一个好主意可能帮助你在这里,在gcc使用中-Wall我看到以下警告:
warning: left operand of comma operator has no effect [-Wunused-value]
return (10, 20, 30, 40);
^
Run Code Online (Sandbox Code Playgroud)
然后还有两个.