如果用const來修飾函數,那麼函數一定是類的成員函數。
const 類型的函數不能返回非const類型的引用
這句話的意思是如果你的函數是const類型的,並且要求返回值是類的非cosnt或者非mutable成員變量,返回類型是引用,那麼這是錯誤的。
class Test
{
public :
int & GetValue()const;
private:
int value;
};
int &Test::GetValue() const
{
return value;
}
這樣的代碼在vs2003中提示的錯誤:error C2440: “return” : 無法從“const int”轉換爲“int &”。
在const函數中傳遞this的時候把this變成了const T* const this(個人理解),所以一個非cont的引用指向一個const類型的變量,就會error。
可以這樣改,
1.把int value 改成mutable int value.mutable修飾的變量使之在const函數中可以被改變的。
2.return value 改成。 return const_cast<int &>(value)。cosnt_cast去掉了cosnt性質。
3.把函數寫成const int &Test::GetValue() const ,.這樣做的目的是使引用的變量也是const類型的,就相當於cont int & b 。
4.把引用去掉,寫成返回值類型的。
5.把函數後面的cont去掉。
6.返回值不是類的成員變量。
int &Test::GetValue() const
{
int temp = value;
return temp;
}
這樣寫是沒有語法錯誤的,但是返回一個臨時變量的引用也是沒有意義的。並且很可能會出錯。