场景:
为一个类的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};