0

今天是个好日子。

我今天遇到了一段奇特的代码,我不太明白。我什至不知道如何搜索这个特定的问题。

在这段有效的代码中,变量赋值是这样完成的:

if(condition) {
    Var1 = false, Var2 = false;
}

现在,我的印象是,所有命令都需要以分号而不是逗号结尾。我熟悉语法

Var1 = Var2 = false;

但不是上面发布的那个。编译器(g++)甚至没有给我一个警告或任何东西......我在这里的规范中遗漏了什么吗?还是编译器对我很慷慨,只是在内部,用 a替换;?如果是这样,他不应该至少发出警告吗?

感谢您的时间。

4

3 回答 3

1

在 C 和 C++ 编程语言中,逗号运算符(由记号 , 表示)是一个二元运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)。(阅读更多

于 2013-10-01T08:58:53.043 回答
1

正如 Alexandru Barbarosie 指出的那样,在https://stackoverflow.com/questions/1613230/uses-of-c-comma-operator上对正在发生的事情进行了相当详尽的解释

为偶然发现这篇文章的人快速总结一下:当在 for 循环和其他东西之外使用时,,实际上与;.

欲了解更多信息,请访问链接。

于 2013-10-01T09:00:08.883 回答
1

我在这里的规范中遗漏了什么吗?

是的,它是 C++11 5.18 指定的“逗号运算符”。它先计算左边的子表达式,然后计算右边的子表达式,总的结果就是右边的子表达式。

在这种情况下,它相当于两个由分隔的表达式语句;

if/while/for它在诸如只允许一种表达但可能想做不止一件事的地方很有用:

while (++i, --j != 0)

并且如果您想将多个语句挤在一起以使必须阅读您的代码的人生活困难。

于 2013-10-01T09:06:05.250 回答