我一直在查看一些MFC代码,我遇到了这个表达式。它在OnInitDialog()函数中,看起来不像是MFC特有的。变量有一些名称,值为0.
int volatile something, somethingElse; //this was global
something, somethingElse = 0; //this was inside the function
这在C ++中是否有意义?我知道逗号运算符是如何工作的,尽管像这里的自由形式它应该是分离表达式。变量名也是表达式吗?这段代码是编译的,所以这是如何工作的?
答案 0 :(得分:6)
这可能是程序中的错误。声明
a, b = c;
完全等同于
b = c;
由于逗号运算符从左到右进行求值并丢弃除最后一个值之外的所有值。由于表达式a没有副作用,因此它基本上是无操作。
我怀疑这是程序员错误或将不同语言的代码错误地翻译成C ++。您应该联系作者,让他们了解这一点。
希望这有帮助!
答案 1 :(得分:4)
合法但有问题。逗号之前的部分根本没有做任何事情。
答案 2 :(得分:4)
这在C ++中是否有意义?
是语法确实如此,但没有评论你可能不知道开发者的意图(如果有的话)可能不会抑制变量警告。
变量名也是表达式吗?
是变量本身就是一个表达式。防爆。 if(<expression>) if(something)
这段代码确实编译了,那么这是如何工作的?
它的工作原理是使用comma operator并忽略something
的结果,然后将0分配给somethingElse
。虽然something
被标记为volatile
,但原始开发人员可能有一个仍然抱怨未使用的变量的编译器,并且他是一个聪明的开发人员,然后他决定使用该语法来抑制。
答案 3 :(得分:4)
something, somethingElse = 0;
可能是这样做的,以避免变量somethin
上的未使用变量警告将somethingElse
变量初始化为0
。