繁体   English   中英

C ++中的静态变量

[英]Static variables in C++

我今天遇到了一个有趣的问题。 看看这个伪代码:

void Loop()
{
   static int x = 1;
   printf("%d", x);
   x++;
}

void main(void)
{
    while(true)
    {
       Loop();
    }
}

即使x是静态的,为什么这段代码每次只打印“1”? 在打印之前,我在每次迭代时将x重新初始化为1。 但无论出于何种原因,x按预期递增。

静态变量的初始化仅在第一次发生。 之后,实例将在函数的所有调用中共享。

我在每次迭代时将x重新初始化为1

不,你不是:你把它初始化为1,但它只被初始化一次。

static并不意味着const

来自MSDN:

修改变量时,static关键字指定变量具有静态持续时间(在程序开始时分配,在程序结束时释放)并将其初始化为0,除非指定了另一个值。 在文件范围内修改变量或函数时,static关键字指定变量或函数具有内部链接(其名称在声明它的文件外部不可见)。

函数中声明为static的变量在对该函数的调用之间保持其状态。

在类声明中修改数据成员时,static关键字指定该类的所有实例共享该成员的一个副本。 在类声明中修改成员函数时,static关键字指定该函数仅访问静态成员。

每个函数调用之间保留静态值,例如(再次从MSDN):

// static1.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
void showstat( int curr ) {
   static int nStatic;    // Value of nStatic is retained
                          // between each function call
   nStatic += curr;
   cout << "nStatic is " << nStatic << endl;
}

int main() {
   for ( int i = 0; i < 5; i++ )
      showstat( i );
}

在您的示例中,x将按预期递增,因为该值将保留

static在此上下文中表示应该在函数调用之间保留值。 初始化只完成一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM