1. 程式人生 > >const成員函數和const對象

const成員函數和const對象

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對象