C++ this指針

一、this指針的理解

this指針是一個特殊的指針,指向一個類的具體實例,即一個類的對象。在類中,通過this指針可以訪問類的成員變量及成員函數。但this指針並不是對象本身的一部分,不會影響sizeof()操作符的結果。

關於this指針有一個比較經典的舉例:當你進去一個房間後,你能看到房子裏的電視、冰箱和沙發,但是你卻看不見整個房子了。同樣的,對於一個類的實例來說,你可以看到他的成員變量,成員函數,而this指針則指向實例本身。

二、this指針的使用

1、this指針是一種特殊的指針變量,不能通過&this來獲取this指針的地址。對於普通的指針變量,是用取地址符(&)是可以獲取存儲該指針變量的地址的,但是對於this指針,將提示:表達式必須是左值或者函數指示符。

2、this指針的作用域僅在類本身的內部,在類的外部this指針將不可訪問。有人說,this指針是在類的成員函數的函數體內創建的,在成員函數開始執行前創建,在成員函數執行完成之後清除。也有人認爲,this指針在整個類的內部應該都是一直可訪問的。

3、當成員函數的參數名與類的成員變量名相同,而要使用該參數給類的成員變量賦值時,需要顯示的使用this指針。如:

class TestClass
{
public:
	TestClass();
	~TestClass();
public:
	void SetTest(int test)
	{
		this->test = test;
	}

private:
	int test;

};
上述代碼的SetTest中,顯示調用了this指針給成員變量test賦值。

4、類的成員函數的第一個參數通常是this指針。ugg在博客 深入探討this指針中(http://blog.csdn.net/ugg/article/details/606396) 提到:如果參數是確定的,this通過ecx傳遞給被調用者,否則,this在所有參數之後壓棧。即:如果類的成員函數是確定,那麼this的存儲位置應該在寄存器中,如果參數不是固定的,則this保存在棧中。

5、const 函數中變量不能修改的原因:

public:
	void SetTest (int test) const
	{
		this->test = test;
	}

private:
	int test;
上邊的函數不能通過編譯,系統將提示表達式必須是可修改的左值,原因在於,此時函數的定義等價於

<span style="white-space:pre">	</span>void SetTest(const TestClass* this, int test)
	{
		this->test = test;
	}
由於this此時是一個指向const變量的指針,因此,該this指針指向的對象的內容不能改變(使用mutable聲明的變量除外)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章