C++中靜態成員函數的常量型問題

這幾天看深入探索C++對象模型時,看到一句話:靜態成員函數不可以是常量函數,如下代碼:

class Test {
	virtual ~Test();
public:
	static void StaTest();
};
如果StaTest()修改爲:static void StaTest() const;
VS2015中編譯回報錯誤:'StaTest': modifiers not allowed on static member functions。

根本原因是:

1. const成員函數的意思是在該函數體中,不允許修改類對象的成員變量,說白了就是成員函數的this指針在const成員函數中是const*的也就是一個指針常量,不允許通過指針修改指針所指向的內容。

2. 再來看靜態成員函數的意義,他是說該成員函數是屬於整個類的,而不是某一個具體的類實例,再直白一點就是不需要this指針(通過類實例調用的成員函數,會被編譯器轉化爲this指針傳入成員函數)。

到此原因就很明顯了,因爲這兩個關鍵字是衝突的,在沒有this指針的函數中,試圖規定this指針的常量性,完全是沒有意義的事情。


日積跬步,以至千里。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章