返回引用的常成员函数

场景:

为一个类的private数组成员定义get接口时遇到了一些写法问题,记录一下


错误写法

以下写法可以通过编译,但运行时会有段错误

class exampleClass{
public:
	///todo ?? getX() const{return m_X;}
private:
	float[3] m_X;
}

写上述接口的时候总是报类型相关的错,经测试,接口类型应写为:

const float * const & getX() const{
	return m_X;//float[3] m_X;
	}

三个const含义说明如下:
1.数组在作参数传递时类型为常指针,故返回值不可用float*,而应是float* const;
2.const成员函数在编译期内会将函数体内的所有成员变量赋const属性,故此时m_X的类型变为
const float * const

这样写可以过编译了,但是这个返回值并不能被正常的使用。


正确写法

以上写法,是将数组类型强制转换为指针类型返回,这时加引用和const会报错(我没想明白原因),返回数组引用的话还是正常返回数组类型:
返回数组引用的常函数声明写成下面的形式:

const float (&getX() const)[3] {return m_X};
//或
using f3 = float[3];
const f3 &getX()const{return m_X};
//或
const decltype(m_X) &getX() const{return m_X};
//或
auto getX() const-> const float(&)[3]{return m_X};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值