在類別內宣告 static 方法時,實作處不需重複標註 static,因為它屬於宣告性關鍵字。靜態方法屬於類別層級,不依賴實例即可呼叫,僅能存取靜態成員,無法存取非靜態欄位。本質上它是帶有類別存取權限的全域函數。
class A
{
private static void Func(int value); // 宣告
}
// 實作時不需 static
void A::Func(int value) { /* ... */ }
在 .cpp 檔案全域範圍加上 static:
static int g_value = 0;
此變數僅在該編譯單元內可見,其他 .cpp 無法存取。若多個檔案各自宣告同名靜態全域變數,它們是獨立的實體,互不干擾。
int g_value = 0; // 未加 static
這會導致連結時可能發生重複定義錯誤,或無法確定是否跨檔案共享。不建議直接使用,應明確指定連結屬性。
extern 宣告,不可初始化:
extern int g_shared; // 僅宣告
int g_shared = 0; // 定義與初始化
在 .cpp 中宣告 static void Func();,實作不需 static。此函數僅在本檔案可見,避免跨檔案同名衝突。切勿在標頭檔宣告 static 全域函數,否則每個包含該標頭的單元都會產生獨立副本,造成混淆。
extern 宣告 + 單一 .cpp 定義。static。static 全域實體,防止產生多份獨立副本。