奇数变量赋值

Odd variable assignment

本文关键字:赋值 变量      更新时间:2023-10-16

大家好。

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

在此有效的代码中,变量赋值是按如下方式完成的:

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

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

Var1 = Var2 = false;

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

谢谢你的时间。

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

是的,它是 C++11 5.18 指定的"逗号运算符"。它计算左侧的子表达式,然后计算右侧的子表达式,总体结果是右侧的子表达式。

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

这在像if/while/for这样只允许你使用一个表达式,但可能想要做不止一件事的地方很有用:

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

此外,如果您喜欢将多个语句塞在一起,以使必须阅读您的代码的人的生活变得困难。

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

正如Alexandru Barbarosie指出的那样,对 https://stackoverflow.com/questions/1613230/uses-of-c-comma-operator 发生的事情有相当彻底的解释

为偶然发现这篇文章的人快速总结一下:当在 for 循环和东西之外使用时,,实际上具有与;相同的效果。

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