C ++中的静态变量

时间:2010-07-28 15:47:50

标签: c++

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

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

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

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

  

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

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

答案 2 :(得分:1)

static并不代表const

来自MSDN:

  

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

     

在a中声明为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将按预期递增,因为值保留

答案 3 :(得分:1)

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