C++问题

-----------------------------------------------------------------------------------------------------------------------------------------------

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

转载 http://blog.sina.com.cn/s/blog_4366aa320100cknr.html

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

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

-----------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值