屬於類本身而非某個對象。靜態數據成員在所有對象間共享一份;靜態成員函數無 this 指針,只能訪問靜態成員。
class A {
public:
static int getVal() { return value; }
static void setVal(int v) { value = v; }
private:
static int value; // 僅聲明
};
int A::value = 0; // 類外定義並初始化(必須)
A obj; A* p = &obj;
obj.getVal(); p->getVal(); A::getVal(); // 均可
可在類內初始化:static const int MAX = 100;。但仍需在類外定義(不初始化):const int A::MAX;。
非 static 數據成員每個對象一份;static 數據成員全程只有一份。static 成員類型可以是本類類型(如單例模式),非 static 不能(會無限遞歸)。
mutable 允許在 const 成員函數中修改該數據成員,常用於緩存、鎖等邏輯可變但語義不可變的場景。