《Effective C++》裏面說,儘量使用const,const修飾變量一般有兩種方式:const T *a,或者 T const *a,這兩者都是一樣的,主要看const位於*的左邊還是右邊,這裏不再贅述,主要來看一下當const修飾類的成員函數時,成員函數有什麼特點。
類的成員函數後面加 const,表明這個函數不會對這個類對象的數據成員(準確地說是非靜態數據成員)作任何改變。
在設計類的時候,一個原則就是對於不改變數據成員的成員函數都要在後面加 const,而對於改變數據成員的成員函數不能加 const。所以 const 關鍵字對成員函數的行爲作了更加明確的限定:有 const 修飾的成員函數(指 const 放在函數參數表的後面,而不是在函數前面或者參數表內),只能讀取數據成員,不能改變數據成員;沒有 const 修飾的成員函數,對數據成員則是可讀可寫的。
除此之外,在類的成員函數後面加 const 還有什麼好處呢?那就是常量(即 const)對象可以調用 const 成員函數,而不能調用非const修飾的函數。
注意:兩個成員函數如果只是常量性不同,是可以被重載的
例如:
class A
{
public:
void f()
{
cout<<"non const"<<endl;
}
void f() const
{
cout<<" const"<<endl;
}
};
微軟筆試第二題正是考這個,const 對象調用f() const,非const對象調用 f()