首页 > 解决方案 > 无括号循环内以逗号分隔的代码行

问题描述

我在上课时遇到了这段代码。这是在我教授的演讲中,我认为这是一个错误,所以出于纯粹的好奇,我试图编译它。令我惊讶的是,它实际上是一个有效的代码。我尝试在网上查找它,但找不到一个明确的答案来说明它为什么会起作用。

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循环会导致编译错误,但它运行顺利。它是标准的还是最近推出的?

标签: c++loopssyntax

解决方案


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

我不认为代码片段对于逗号运算符来说是一个很好的使用场景。它似乎被用于不打字来为循环{}创建一个主体,这很懒惰并且不必要地“聪明”。while但它有效。

如果您对逗号运算符的合法用例感兴趣,请查看这篇文章


推荐阅读