const 类型的函数不能返回非const类型的引用

来源:互联网 发布:淘宝客服有人工电话吗 编辑:程序博客网 时间:2024/04/25 20:34

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

这样写是没有语法错误的,但是返回一个临时变量的引用也是没有意义的。并且很可能会出错。

原创粉丝点击