无括号循环内用逗号分隔的代码行

时间:2019-04-08 08:06:42

标签: c++ loops syntax

为我的课程学习时,我遇到了这段代码。这是在我的教授的演讲中,我认为这是一个错误,因此出于纯粹的好奇心,我尝试对其进行编译。令我惊讶的是,它实际上是一个有效的代码。 我尝试在线查找它,但找不到确切的答案。

int n, num;
scanf("%d", &n);
vector<int> arr;
arr.reserve(n);

while (n--)
        scanf("%d", &num),
        arr.push_back(num);

for (int i : arr) printf("%d ", i);
printf("\n");

我希望while循环会导致编译错误,但是运行平稳。 是标准的还是最近引入的?

1 个答案:

答案 0 :(得分:3)

这是工作中的comma operator。它先计算运算符的左侧(scanf("%d", &num)),然后计算右侧(arr.push_back(num)),然后返回该表达式的结果。

我认为该代码段对于逗号运算符不是很好的用法。它似乎用于不键入{}来为while循环创建主体,这是懒惰的并且不必要地是“智能”的。但这有效。

如果您对逗号运算符的合法用例感兴趣,请查看this article