gpt4 book ai didi

c++ - 为什么使用函数而不是对成员的引用?

转载 作者:IT老高 更新时间:2023-10-28 12:43:17 26 4
gpt4 key购买 nike

我只是在测试查看一些代码并注意到类似于:

template<typename T>
class example{
public:
example(T t): m_value{t}{}

const T &value = m_value;

private:
T m_value;
};

我以前没见过这个。我之前使用的几乎每个 API 或库都定义了一个返回成员变量的函数,而不是对它的常量引用:

template<typename T>
class example{
public:
example(T t): m_value{t}{}

const T &value() const{
return m_value;
}

private:
T m_value;
};

为什么第一种方式不太常见?有什么缺点?

最佳答案

返回适当引用的(内联)函数更好的原因有几个:

  1. 引用将需要每个对象中的内存(通常与指针的数量相同)

  2. 引用通常与指针具有相同的对齐方式,因此导致周围对象可能需要更高的对齐方式,从而浪费更多的内存

  3. 初始化引用需要(极少的)时间

  4. 拥有引用类型的成员字段将禁用默认的复制和移动赋值运算符,因为引用不可重新安装

  5. 拥有引用类型的成员字段将导致自动生成的默认复制和移动构造函数不正确,因为它们现在将包含对其他对象成员的引用

  6. 函数可以进行额外的检查,例如验证调试版本中的不变量

请注意,由于内联,该函数通常不会产生任何超出可能稍大的二进制文件的额外成本。

关于c++ - 为什么使用函数而不是对成员的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com