Cof*_*ode 30 c++ reference class c++11
我只是测试查看一些代码并注意到类似于:
template<typename T>
class example{
public:
example(T t): m_value{t}{}
const T &value = m_value;
private:
T m_value;
};
Run Code Online (Sandbox Code Playgroud)
我以前没见过这个.几乎我以前使用的每个API或库都定义了一个返回成员变量的函数,而不是对它的常量引用:
template<typename T>
class example{
public:
example(T t): m_value{t}{}
const T &value() const{
return m_value;
}
private:
T m_value;
};
Run Code Online (Sandbox Code Playgroud)
为什么第一种方式不常见?有什么缺点?
gha*_*.st 34
返回适当引用的(内联)函数更好的原因有几个:
引用将需要每个对象中的内存(通常与指针的数量相同)
引用通常具有与指针相同的对齐,因此导致周围对象可能需要更高的对齐,从而浪费更多的内存
初始化引用需要(少量)时间
具有引用类型的成员字段将禁用默认副本并移动赋值运算符,因为引用不可重定位
具有引用类型的成员字段将导致自动生成的默认副本和移动构造函数不正确,因为它们现在将包含对其他对象的成员的引用
函数可以执行其他检查,例如在调试版本中验证不变量
请注意,由于内联,该函数通常不会产生任何超出可能稍大的二进制文件的额外成本.