這幾天看深入探索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指針的常量性,完全是沒有意義的事情。
日積跬步,以至千里。