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 次,看看它能正確累計。