为什么此代码片段在 C++11 中无限打印 10?

Why does this code snippet print 10 infinitely in c++11?

为什么以下 C++ 代码片段会无限期地打印 10?

int num = 10;
while (num >= 1)
   cout << num << " ";
   num--;

如果您想在 C++ 中使用 while 循环,则必须将内部代码包含在 {} 之间,如下所示:

while(/* Condition */){
  // Do something
}

当使用大括号时,您的代码片段与此等效:

int num = 10;
while (num >= 1)
{
   cout << num << " ";
}
num--;

意味着只有打印语句是循环的一部分。你要的是这个:

int num = 10;
while (num >= 1)
{
   cout << num << " ";
   num--;
}

您可能熟悉 python,尽管在 C++ 中作用域与缩进无关。

如果缩进正确,它将如下所示:

int num = 10;
while (num >= 1)
   cout << num << " ";
num--;

我真的会在这里推荐一个像 clang-format 这样的格式化工具,因为它会立即给你这个反馈。

C++ 中的作用域是使用 {} 完成的。 因此,代码应该是:

int num = 10;
while (num >= 1)
{
   cout << num << " ";
   num--;
}

如果您不指定 {},则只有下一条语句是范围的一部分。

在这种情况下,我猜你正在尝试学习 while 循环。尽管此代码更适合 for 循环。

int num = 10;
for (int num = 10; num >= 1; num--)
   cout << num << " ";