C++ 的 this 指針
指針在這裏面是非常難理解的東西,所以要根據例子,自己實踐。
在你沒有去具體瞭解之前,不要輕易下結論。
最近,看了《在山的那邊》,又有一點新感悟( •̀ ω •́ )✧
this指針
調用成員函數時,成員函數通過一個名為 this 的隱式參數來訪問調用它的那個對象,用請求該函數的對象地址初始化 this ,this 的指向總是自己這個對象,所以 this 是一個常量指針
Box* get_address() //得到this的地址
{
return this;
}
Box* get_address() //得到this的地址
{
Box box;
this = &box; // error: lvalue required as left operand of assignment
return this;
}
在 C++ 中,this 指針是一個隱式傳遞給非靜態成員函數的常量指針,用於指向調用該函數的對象。以下是對你的代碼和 this 的特性總結:
特性:
-
this是一個隱式指針:- 每個非靜態成員函數都有一個隱式的
this指針,用來訪問調用該成員函數的對象。 this指針的類型為ClassName* const,即常量指針,不能被修改。
- 每個非靜態成員函數都有一個隱式的
-
this指針的用途:- 訪問成員變量和成員函數。
- 返回對象自身的地址。
- 在需要對象指針的場景下傳遞
this。
-
靜態成員函數中沒有
this指針:- 靜態成員函數不與任何特定對象綁定,因此沒有
this指針。
- 靜態成員函數不與任何特定對象綁定,因此沒有
代碼分析
-
正確的用法:
Box* get_address() // 返回當前對象的地址 { return this; }解釋:
- 函數中
this指針指向調用該函數的對象。 - 返回
this時即返回調用該函數的對象地址。 - 這是一個有效的用法。
- 函數中
-
錯誤的用法:
Box* get_address() { Box box; this = &box; // 錯誤: 賦值操作試圖修改 `this` return this; }錯誤原因:
this是一個常量指針,不能被賦值。this的作用是固定指向當前調用對象,任何試圖修改this都會導致編譯錯誤。
總結
this指針的值是無法更改的,它始終指向當前對象。- 如果需要返回一個新對象的地址,應該直接返回新對象的地址而不是試圖修改
this。
正確示例:
Box* create_new_box()
{
Box* box = new Box();
return box; // 返回新對象的地址
}