【问题标题】:Scope and Lifetime of variables inside "for" loop in c++ [duplicate]c ++中“for”循环内变量的范围和生命周期[重复]
【发布时间】:2015-05-22 08:50:51
【问题描述】:

为什么这些代码显示不同的结果:

for (int i = 0; i < 5; ++i)
    {
        static int n = 0;
        n++;
        cout<<n<<endl; // prints 1 2 3 4 5
    }

    for (int i = 0; i < 5; ++i)
    {
        int n = 0;
        n++;
        cout<<n<<endl; // prints 1 1 1 1 1
    }

如果静态变量 n 再次声明,为什么它会保留其先前的值。 “for”循环中静态变量的范围到底发生了什么? 为什么编译器在(第一次)循环的第二次迭代中没有显示再次声明现有变量的错误?

另外请说明为什么这些代码显示不同的结果:

for(i=0;i<5;i++)
    {
        static int n;
        n=0;
        n++;
        cout<<n<<endl; //Print 1 1 1 1 1
    }

    for(i=0;i<5;i++)
    {
        static int n=0;
        n++;
        cout<<n<<endl; //Print 1 2 3 4 5
    }

【问题讨论】:

  • "静态变量 n 又被声明了,为什么它保留它以前的值" 因为那是静态变量的重点。
  • 您是否期望它们具有相同的结果?为什么?
  • 为什么编译器在(第一个)循环的第二次迭代期间没有显示再次声明现有变量的错误?

标签: c++ scope lifetime


【解决方案1】:

for 循环中的变量 n 与静态变量不同,因为它们的作用域不同。如果您在 if 循环中删除声明 int n,您将看到输出为 6 7 8 9 10。

【讨论】:

    【解决方案2】:

    名称“n”在这两种情况下具有相同的范围 - 循环体。
    (范围是名称的属性,而不是对象的属性。)

    第一个循环有一个变量,它的生命周期从第一次迭代期间的声明开始,到程序退出时结束。
    初始化仅在其生命周期开始时执行。

    第二个循环对于循环的每次迭代都有一个名为“n”的单独变量。
    它们的生命周期从声明开始,到迭代结束时结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2023-03-31
      • 2013-08-07
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2012-06-23
      相关资源
      最近更新 更多