gpt4 book ai didi

c++ - 返回括号之间的值列表(10、20、30、40)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:38 25 4
gpt4 key购买 nike

我在 Visual Studio 2012 中使用 C++(不是 C++/CLI)。

我不明白为什么这段代码能工作,我原以为它会在编译时失败,但它甚至在运行时都没有失败:

double MyClass::MyMethod() const
{
//some code here
return (10, 20, 30, 40);
}

我错误地生成了这段代码,不是故意的,我在运行单元测试时注意到了这个错误。我很惊讶它有效。当我运行它时,它返回列表中的最后一个数字 40

谁能解释一下这个语法的含义以及它为什么有效?

最佳答案

这是使用 comma operator它将从从左到右 评估每个表达式,但只返回最后一个。如果我们看一下 draft C++ standard 5.18 逗号运算符部分说:

A pair of expressions separated by a comma is evaluated left-to-right; the left expression is a discarded value expression (Clause 5).83 Every value computation and side effect associated with the left expression is sequenced before every value computation and side effect associated with the right expression.

链接的文章给出了最常见的用法:

allow multiple assignment statements without using a block statement, primarily in the initialization and the increment expressions of a for loop.

和之前的话题 Uses of C comma operator有一些非常有趣的例子,说明人们如何使用逗号运算符,如果您真的很好奇的话。

gcc 中使用 -Wall 时,启用总是一个好主意的警告可能对您有所帮助,我看到以下警告:

warning: left operand of comma operator has no effect [-Wunused-value]
return (10, 20, 30, 40);
^

然后还有两个。

关于c++ - 返回括号之间的值列表(10、20、30、40)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com