簡體   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