static 是 C++ 中用於控制變量/函數存儲方式和可見性的修飾符。其含義因上下文(面向過程 vs 面向對象、全局 vs 局部)而異。
在全局變量前加 static,使其成為文件級作用域:僅在定義該變量的源文件中可見,其他文件即使用 extern 也無法訪問。未顯式初始化時自動初始化為 0。適合模塊內部狀態封裝。
在函數內部定義 static 變量,其存儲在全局數據區而非棧上。生命周期贯穿整個程序運行,但作用域僅限於該函數。值在函數調用之間保持。解決了「函數調用間保持狀態」且不污染全局命名空間的需求。
在函數聲明前加 static,限制該函數僅在本文件可見。不同文件可定義同名靜態函數不衝突。實現文件級封裝。
int MyClass::sum = 0;)。public/protected/private 訪問控制。對象.靜態成員 或 類名::靜態成員。this 指針,只能直接訪問靜態成員;訪問非靜態成員需通過對象參數。static)。// 靜態局部變量
void counter() {
static int cnt = 0;
cout << ++cnt << endl;
}
// 類靜態成員
class MyClass {
public:
MyClass(int v) : val(v) { ++total; }
static int getTotal() { return total; }
private:
int val;
static int total; // 聲明
};
int MyClass::total = 0; // 定義並初始化
理解 static 的關鍵在於區分「存儲期」(靜態存儲 vs 自動存儲)與「作用域/鏈接性」(文件級 vs 類級 vs 塊級)。善用 static 可實現封裝、狀態保持和命名空間隔離。