成員變量與成員函數分開存儲:
普通成員函數隱式第一參數為 this 指針。調用 obj.func() 實際為 func(&obj)。靜態成員函數無 this,僅按作用域解析。
class C1 { int i,j,k; }; // sizeof=12
class C2 { int i,j,k; static int m;
int getK() const { return k; }
void setK(int v) { k=v; }
}; // sizeof=12 (靜態不計入)
struct S1 { int i,j,k; }; // sizeof=12
struct S2 { int i,j,k; static int m; }; // sizeof=12
輸出均為 12,證明函數不佔對象空間,靜態成員不佔對象空間。
對象 obj: [i][j][k] ← 數據成員
代碼段: C2::getK() ← 隱含 this 指針參數
C2::setK()
靜態區: C2::m
Class* const this。this。理解編譯器如何將類映射為內存佈局與函數調用,是掌握 C++ 對象模型、多態實現、內存優化的基礎。核心口訣:「數據在對象,代碼在代碼段,this 傳遞連接兩者」。