4

我一直在查看一些 MFC 代码,我遇到了这个表达式。它在 OnInitDialog() 函数中,看起来不像是特定于 MFC 的。变量有一些名称,值为 0。

int volatile something, somethingElse; //this was global

something, somethingElse = 0; //this was inside the function

这在 C++ 中有意义吗?我知道逗号运算符是如何工作的,尽管像这里这样的自由形式它应该是分隔表达式。变量名也是表达式吗?这段代码确实可以编译,那么它是如何工作的呢?

4

4 回答 4

6

这很可能是程序中的错误。该声明

a, b = c;

完全等价于

b = c;

由于逗号运算符从左到右计算并丢弃除最后一个以外的所有值。由于表达式 a 没有副作用,因此它本质上是一个空操作。

我怀疑这要么是程序员错误,要么是从另一种语言到 C++ 的代码翻译不正确。您应该联系作者,让他们知道这一点。

希望这可以帮助!

于 2012-02-01T19:34:48.010 回答
4

合法但有问题。逗号之前的部分根本不做任何事情。

于 2012-02-01T19:34:28.667 回答
4

这在 C++ 中有意义吗?

是的,在语法上确实如此,但如果没有注释,您可能不知道开发人员的意图(如果有的话),除了可能会抑制变量警告。

变量名也是表达式吗?

是的,变量本身就是一个表达式。前任。if(<expression>) if(something)

这段代码确实可以编译,那么它是如何工作的呢?

它通过使用逗号运算符并忽略something然后将 0 分配给somethingElse. 尽管something被标记volatile为原始开发人员可能有一个编译器仍然抱怨未使用的变量并且是聪明的开发人员,但他或她随后决定使用该语法压制。

于 2012-02-01T19:34:35.367 回答
4
something, somethingElse = 0; 

可能是为了避免变量something 上的未使用变量警告将变量初始化somethingElse0

于 2012-02-01T19:34:38.893 回答