1. 程式人生 > >C++中靜態成員函式的常量型問題

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指標的常量性,完全是沒有意義的事情。

日積跬步,以至千里。