C++中this指標的作用以及用法詳解
為什麼引用this指標?
當我們在類中定義了一個變數,同時又在類成員函式中定義了同一個變數時,也就是變數名重複時,但是我們要想使用類中的定義的變數,此時就需要this指標了。
1.this指標的作用
指標存在於類的成員函式中,指向被呼叫函式類例項的地址。
一個物件的this指標並不是物件本身的一部分,不會影響sizeof()的結果。
this指標的作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的地址作為一個隱含引數傳遞給函式。換句話說就是,及時你沒有用this指標,編譯器在編譯的時候也會自動加上this的,它是一個隱含形參,對各成員的訪問均通過this進行。
2.this指標的使用
(1)在類的非靜態成員函式中返回類物件本身的時候,直接使用 return *this;
(2)當引數與函式成員變數名相同時,應使用 this.age = age;
3.this指標的特點
(1)this指標只能在成員函式中使用
全域性函式,靜態函式都不能使用this指標,其實,成員函式的第一個預設引數是 *const this
例:class Student()
{
int fun(int x)
{
}
};
函式fun(int x)的原型在編譯器看來就是 fun(Student *const this ,int x)
(2)this 指標在成員函式的開始前構造,在成員函式的結束後清除,生命週期和其他函式引數一樣。當呼叫一個類的成員函式時,編譯器將類的指標作為函式的this引數傳遞進去。
如:Student stu;
stu.fun(3);
此時編譯器會編譯成:
Student::fun(&x,3);
(3)this指標會因編譯器不同而有不同的放置位置。可能是棧,也可能是暫存器,甚至全域性變數。
在彙編級 別裡面,一個值只會以3種形式出現:立即數、暫存器值和記憶體變數值。不是存放在暫存器就是存放在內 存中,它們並不是和高階語言變數對應的。