[英]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.