【问题标题】:How does the condition (Expression-2) of this for loop work?这个 for 循环的条件(表达式 2)如何工作?
【发布时间】:2021-07-04 08:13:39
【问题描述】:
#include <bits/stdc++.h>
using namespace std;

int fun()
{
  static int num = 16;
  return num--;
}
 
int main()
{
  for(fun(); fun(); fun())
  cout<< fun()<<" ";
  return 0;
}

Output : 14 11 8 5 2 

for 循环的条件(表达式-2)如何工作?我的意思是,为什么当 fun 返回 0(num 变为 -1)时它会终止?

【问题讨论】:

  • int 转换为 bool 时,0 变为 false,其他任何值变为 true。 > C++14 §4.12/1 “零值、空指针值或空成员指针值被转换为假;
  • #include 不是真正的头文件,请不要使用这个
  • for 循环可以转换为while 循环。像for (A; B; C) { D; } 这样的for 循环将是A; while (B) { D; C; }。在您的具体情况下,它将是fun(); while (fun()) { fun(); fun(); }。它可能更容易跟随并查看正在发生的事情。并且更容易使用 调试器 逐句逐句执行代码。
  • 我相信这实际上是基本的“for 循环如何工作?”的重复。题。简而言之,您可以将for 替换为伪代码,这样对于不熟悉它的人来说,它的功能会更加清晰。 ETA:基本上是@Someprogrammerdude 所说的
  • 如果您问为什么num 初始化为 17,但以 16 正确终止,这将是一个更有趣的问题。

标签: c++ for-loop static


【解决方案1】:

条件语句在进入循环体之前被评估。在您的情况下,该语句的计算结果为 true,并且循环体被执行,if fun() 返回一个非零值。

要清楚地看到这一点,请按如下方式修改您的代码:

int fun( const char* name)
{
  static int num = 16;
  cout << name << ":" << num << "\n";
  return num--;
}

int main()
{
  for(fun("init"); fun("test"); fun("iterate"))
    cout<< fun("body")<<" ";
  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多