`this` 是**指向當前對象的常量指針** (`T* const`),即**指針本身不可修改 (不能指向別處)**,但**可通過它修改對象數據** (除非在 `const` 成員函數中)。
| 成員函數類型 | this 類型 | 可修改對象數據? | 可修改 this 指向? |
|---|---|---|---|
| 普通函數 | `T* const this` | ✅ | ❌ |
| `const` 函數 | `const T* const this` | ❌ (編譯器強制) | ❌ |
| `volatile` 函數 | `volatile T* const this` | ✅ | ❌ |
| `const volatile` 函數 | `const volatile T* const this` | ❌ | ❌ |
class A {
int val;
public:
void setVal(int v) const {
// this 類型: const A* const this
// val = v; // ❌ 編譯錯誤:this 指向 const A,無法修改成員
// this = nullptr; // ❌ 編譯錯誤:this 是常量指針
}
};
第一個 `const` (靠近類型) 限制**數據不可修改** (邏輯常量性)。
第二個 `const` (靠近變量名 `this`) 限制**指針不可修改** (身份常量性)。
// 早期合法,現代極度危險
void suicide() {
delete this; // 要求:對象必須在堆上 new 出來、無虛析構函數風險、調用後絕不訪問成員
}
現代 C++ **嚴禁** `delete this`,改用智能指針 (`shared_ptr` + 自定義刪除器) 管理對象生命周期。
`this` 為 `T* const` (常量指針) 是由**對象身份不可變性**、**隱式參數值傳遞機制**、**歷史教訓防錯**共同決定的。`const` 成員函數進一步將指向類型加 `const` (`const T* const`),實現邏輯常量性與身份常量性的雙重保障。這是 C++ 類機制穩健性的基石之一。