如果用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 改成。
3.把函数写成const int &Test::GetValue() const
4.把引用去掉,写成返回值类型的。
5.把函数后面的cont去掉。
6.返回值不是类的成员变量。
int &Test::GetValue() const
{
int temp = value;
return temp;
}
这样写是没有语法错误的,但是返回一个临时变量的引用也是没有意义的。并且很可能会出错。