C++函數聲明的時候後面加const

非靜態成員函數後面加const(加到非成員函數或靜態成員後面會產生編譯錯誤),表示成員函數隱含傳入的this指針爲const指針,決定了在該成員函數中,任意修改它所在的類的成員的操做都是不容許的(由於隱含了對this指針的const引用);惟一的例外是對於mutable修飾的成員。加了const的成員函數能夠被非const對象和const對象調用,但不加const的成員函數只能被非const對象調用。例如: 函數

複製代碼

1 class A { 
 2     private: int m_a; 
 3     public: 
 4         A() : m_a(0) {} 
 5          int getA() const  { 
 6              return m_a; //同return this->m_a;。
 7          } 
 8          int GetA() { 
 9              return m_a; 
10          } 
11          int setA(int a) const { 
12              m_a = a; //這裏產生編譯錯誤,若是把前面的成員定義int m_a;改成mutable int m_a;就能夠編譯經過。 
13          } 
14          int SetA(int a)  { 
15              m_a = a; //同this->m_a = a;
16          } 
17 }; 
18 A a1; 
19 const A a2; 
20 int t; 
21 t = a1.getA(); 
22 t = a1.GetA(); 
23 t = a2.getA(); 
24 t = a2.GetA(); //a2是const對象,

複製代碼

調用非const成員函數產生編譯錯誤。 通常對於不需修改操做的成員函數儘可能聲明爲const成員函數,以防止產生const對象沒法調用該成員函數的問題,同時保持邏輯的清晰。this

相關文章
相關標籤/搜索