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


轉載:https://blog.csdn.net/zhangss415/article/details/7998123
非靜態成員函數后面加const(加到非成員函數或靜態成員后面會產生編譯錯誤),表示成員函數隱含傳入的this指針為const指針,
決定了在該成員函數中,任意修改它所在的類的成員的操作都是不允許的(因為隱含了對this指針的const引用);唯一的例外是對於mutable
修飾的成員。加了const的成員函數可以被非const對象和const對象調用,但不加const的成員函數只能被非const對象調用。例如: 
class A 
private: int m_a; 
public: A() : m_a(0) {} 
 int getA() const 
 { 
 return m_a; //同return this->m_a;。
 } 
 int GetA() 
 { 
 return m_a; 
 } 
 int setA(int a) const 
 { 
 m_a = a; //這里產生編譯錯誤,如果把前面的成員定義int m_a;改為mutable int m_a;就可以編譯通過。 
 } 
 int SetA(int a) 
 { 
 m_a = a; //同this->m_a = a;
 } 
}; 
A a1; 
const A a2; 
int t; 
t = a1.getA(); 
t = a1.GetA(); 
t = a2.getA(); 
t = a2.GetA(); //a2是const對象,
調用非const成員函數產生編譯錯誤。 一般對於不需修改操作的成員函數盡量聲明為const成員函數,以防止產生const對象無法調用該成員函數的問題,同時保持邏輯的清晰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM