1. 程式人生 > 其它 >【程式設計】C++:this指標的特性、this指標存在哪裡、this指標可以為空嗎

【程式設計】C++:this指標的特性、this指標存在哪裡、this指標可以為空嗎

this指標的特性:

編譯器處理成員函式隱含的this指標

void Display()
{
	cout<<_year<<endl;
}
// 底層
void Display(Date* this)
{
	cout<<this->_year<<endl;
}
  1. this指標的型別:類型別* const
  2. 只能在“成員函式”的內部使用
  3. this指標本質上是一個成員函式的形參,是物件呼叫成員函式時,將物件地址作為實參傳遞給this形參。所以物件中不儲存this指標。

面試題

  1. this指標存在哪裡?
    其實編譯器在生成程式時加入了獲取物件首地址的相關程式碼。並把獲取的首地址存放在了暫存器ECX中(VC++編譯器是放在ECX中,其它編譯器有可能不同)。也就是成員函式的其它引數正常都是存放在棧中。而this指標引數則是存放在暫存器中。

    類的靜態成員函式因為沒有this指標這個引數,所以類的靜態成員函式也就無法呼叫類的非靜態成員變數。

  2. 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(); // 會報錯 }