gpt4 book ai didi

c++ - 常量引用与内联 getter - C++

转载 作者:行者123 更新时间:2023-12-02 09:51:27 25 4
gpt4 key购买 nike

我有一个私有(private)领域的类(class)。该字段仅在类内部写入,但必须从外部读取。哪个选项更可取,为什么?
首先,使用 const 引用

class Test {
public:
const int &field; // can read outside

inline Test() noexcept: field(_field) {}

void someMethod() {
_field = 123; // writing occurs only inside the class
}
private:
int _field;
};
或者第二,使用内联 setter/getter :
class Test {
public:
void someMethod() {
_field = 123; // writing occurs only inside the class
}

inline int field() const noexcept { // can call outside
return _field;
}
private:
int _field;
};

最佳答案

避免引用类型的数据成员有很多原因:

  • 它使对象大小膨胀
  • 所有赋值运算符默认删除
  • 默认的复制构造函数出错,将新拷贝的生命周期与复制源对象的生命周期联系起来。
  • 该对象不再是标准布局,也不能轻易复制

  • 如果您真的想公开引用,请将其作为成员函数的返回类型:
    const int& field() const { return field_; } // avoid leading underscores in application code
    不过,一般来说,返回值的性能更高,调用代码更容易使用。
  • 复制一个小值与形成一个引用(复制一个指针)一样便宜
  • 编译器不必担心别名
  • 程序员不必担心别名
  • 关于c++ - 常量引用与内联 getter - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64356628/

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