7.6 關鍵字 static
通常在函式內宣告的變數,每次呼叫函式都是全新的。有時你想讓變數在函式呼叫之間「記住」它的值——這時用 static。
加上 static 關鍵字的變數有特殊性質:
- 初始化只發生一次(第一次呼叫函式時)
- 之後的修改會被保留
- 多次呼叫函式時,同一個變數值會累積
¶範例程式碼
#include<iostream>
using namespace std;
// 普通變數版本
void normalCounter() {
int count = 0;
count++;
cout << "Normal: " << count << "\n";
}
// static 變數版本
void staticCounter() {
static int count = 0; // 第一次呼叫時初始化為 0,之後不再初始化
count++;
cout << "Static: " << count << "\n";
}
int main() {
// 呼叫普通版本三次
normalCounter(); // 輸出 1
normalCounter(); // 輸出 1
normalCounter(); // 輸出 1(每次都重新初始化)
cout << "\n";
// 呼叫 static 版本三次
staticCounter(); // 輸出 1
staticCounter(); // 輸出 2(count 被保留)
staticCounter(); // 輸出 3(count 繼續累積)
return 0;
}
執行結果:
Normal: 1
Normal: 1
Normal: 1
Static: 1
Static: 2
Static: 3
動手試試看:寫一個 void statistics() 函式,每次呼叫時都會問使用者輸入一個整數。用 static 變數記錄已輸入的整數個數。呼叫 5 次,看看它能正確累計。