gpt4 book ai didi

c++ - 对类成员而不是 getter 的常量引用

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:01 25 4
gpt4 key购买 nike

获取对类成员或其值的引用的经典方法是我们使用像 getValue() 这样的 getter。这可能是另一种方法吗? :

class A{
ComplexClass value_;
public:
//No need. ComplexClass const& getValue() const { return value_; }
ComplexClass const& value = value_; /// ???
}

这行得通吗?你喜欢这样的语法吗?

更新。这一点是为了让用户代码更简单。就我个人而言,我更喜欢 auto x = a.value 而不是 auto x = a.getValue()当然,这是一笔交易。

如果:

class A{
public:
ComplexClass const& value = value_;
protected:
ComplexClass value_;
}

我问是因为我在使用一个编译器时遇到了一些麻烦。

最佳答案

相比数据成员更喜欢成员函数的主要原因之一是灵 active 和可维护性。如果您只编写过一次完美的代码,并且永远不会更改或重用,那么您当然可以拥有用户直接引用的公共(public)数据成员。

有趣的问题是当您的代码不符合这些标准时会发生什么,例如它是否会发展,以及其他人是否开始使用它。然后,一旦您拥有公共(public)数据成员,您就被迫始终拥有该数据成员。您的类(class)布局的详细信息现在是您的公共(public)契约(Contract)的一部分。简单的重构,例如将公共(public)部分移动到嵌套的成员对象中,不再是私有(private)的,并且会破坏现有用户。

你提议的引用数据成员几乎没有增加公共(public)数据成员的好处(除了在非常微不足道的情况下),并且与成员函数不同,非静态数据成员影响类布局。类布局是您在拥有用户后可能希望保持稳定的另一件事,以便旧的、已编译的库可以继续链接到新的用户代码。在保持数据布局不变的情况下,成员函数更容易发展。

标准库中有一个很好的例子,就是犯了这样的错误:std::pair<T1, T2>指定包含公共(public)数据成员 firstsecond .这意味着所有用户特化都必须遵守相同的规范,并且不能轻易地使用基本布局优化之类的东西。有firstsecond被指定为成员函数,这样的优化可以被简单地应用。

关于c++ - 对类成员而不是 getter 的常量引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392033/

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