【程式設計】C++:this指標的特性、this指標存在哪裡、this指標可以為空嗎
阿新 • • 發佈:2021-02-05
this指標的特性:
編譯器處理成員函式隱含的this指標
void Display()
{
cout<<_year<<endl;
}
// 底層
void Display(Date* this)
{
cout<<this->_year<<endl;
}
- this指標的型別:類型別* const
- 只能在“成員函式”的內部使用
- this指標本質上是一個成員函式的形參,是物件呼叫成員函式時,將物件地址作為實參傳遞給this形參。所以物件中不儲存this指標。
面試題
-
this指標存在哪裡?
其實編譯器在生成程式時加入了獲取物件首地址的相關程式碼。並把獲取的首地址存放在了暫存器ECX中(VC++編譯器是放在ECX中,其它編譯器有可能不同)。也就是成員函式的其它引數正常都是存放在棧中。而this指標引數則是存放在暫存器中。 -
this指標可以為空嗎?
可以為空。當我們在呼叫函式的時候,如果函式內部不需要通過this指向當前物件並對其進行操作時才可以為空(當我們在其中什麼都不放或者在裡面隨便列印一個字串);如果呼叫的函式需要指向當前物件,並進行操作,則會發生錯誤(空指標引用)。
class A
{
public:
void PrintA()
{
cout<<_a<<endl;
}
void Show()
{
cout<< "Show()"<<endl;
}
private:
int _a;
};
int main()
{
Date* p = NULL;
p->PrintA(); // 不會報錯
p->Show(); // 會報錯
}