const 類型的函數不能返回非const類型的引用

如果用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;
}

這樣寫是沒有語法錯誤的,但是返回一個臨時變量的引用也是沒有意義的。並且很可能會出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章