无括号循环中以逗号分隔的代码行[重复]

问题描述 投票:5回答:1

这个问题在这里已有答案:

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

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++ loops syntax
1个回答
3
投票

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

我认为代码片段不是逗号运算符的良好使用场景。它似乎被用于不键入{}来为while循环创建一个身体,这是懒惰和不必要的“聪明”。但它的确有效。

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

© www.soinside.com 2019 - 2024. All rights reserved.