const成員函數和const對象
阿新 • • 發佈:2018-02-27
return 成員 pre gpo () 指向 編譯 內容 如果
從成員函數說起
在說const成員函數之前,先說一下普通成員函數,其實每個成員函數都有一個隱形的入參:T *const this。
1 int getValue(T *const this) 2 { 3 return val; 4 }
const成員函數
聲明形式是:int getValue() const;
編譯器內部實現如下
1 int getValue(const T* const this) 2 { 3 return val; 4 }
表示this指針指向的內容是不可改變的,所以當試圖修改val時會編譯報錯。
const對象
當一個對象聲明成const時,表示指向它的this指針也是const的了,變成const T *this。如果此時調用一個非const成員函數,如int getValue(),而不是int getValue() const,那麽相當於把const T*this賦值給T *const this,當然會報錯。所以這時候要添加一個const版本的int getValue() const,編譯就能通過了。
1 T *this = const T *this;
當然普通非const對象調用const成員函數也是可行的,反之不行。
const成員函數和const對象