返回括号 (10, 20, 30, 40) 之间的值列表
return list of values between parenthesis (10, 20, 30, 40)?
>我在Visual Studio 2012中使用C++(不是C++/CLI)。
我不明白为什么这段代码有效,我本来希望它在编译时失败,但它在运行时甚至不会失败:
double MyClass::MyMethod() const
{
//some code here
return (10, 20, 30, 40);
}
我错误地生成了这段代码,不是故意的,我在运行单元测试时注意到了这个错误。我很惊讶它有效。当我运行它时,它返回 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);
^
然后还有两个。
号运算符是C++中的"序列点",通常用于初始化for
循环中的多个变量。
因此,代码将一系列整数(一次一个)作为单个表达式进行评估。最后一个是返回值,return 语句作为一个整体等价于简单的return (40);
表达式(10, 20, 30, 40)
实际上是由 ,
分隔的一系列 4 个表达式 您可以使用,
分隔多个表达式,结果是最后一个表达式的求值。
您已经使用了逗号运算符,
即逗号运算符
return ()
是有效的。
return (/*valid evaluation*/)
也是如此
逗号运算符返回最后一个值,即40
- 介于 1 和 100 之间的质数列表
- 列表和forward_list性能之间的区别?
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 使用特征查找两个列表之间的差异
- 在地图和列表之间查找标准容器
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 直接列表初始化和复制列表初始化之间的差异
- 如何在这两个分类的链接列表之间获得开关的位置
- 添加一个节点,并在通用树中的两个给定节点之间找到路径成本,其中c 中的儿童列表
- 在C 中共享线程之间的列表
- C++11 在列表到映射(或其他容器)之间移动元素
- 列表和向量的索引之间的差异
- 我应该如何分享该过程和多个DLL之间的功能列表
- unordered_set与链接列表之间的性能比较
- 分配列表和初始化器列表之间 C++11 缩小的差异
- 链接列表C 类,这两个添加节点实现之间的差异是什么?
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- 复制列表初始化和传统复制初始化之间的任何区别
- 两个标准::列表之间的距离
- 在C++上的两个MFC树列表之间拖放