gpt4 book ai didi

c++ - 什么是聚合类?

转载 作者:太空狗 更新时间:2023-10-29 19:48:11 26 4
gpt4 key购买 nike

我刚刚在第 298 页的 C++ Primer(第 5 版)中阅读了以下定义:

A class is an aggregate if:

  • All of its data members are public

  • It does not define any constructors

  • It has no in-class initializers

  • It has no base classes or virtual functions

此帖子中还提供了一个定义:What are Aggregates and PODs and how/why are they special? .

在阅读了本书前几节关于封装值(value)的所有内容后,我想知道:为什么会有人想要使用聚合类? (顺便说一句,这个问题似乎一般适用于 struct:为什么我要默认使用 public:?)

最佳答案

聚合基本上是一个简单的数据集合,没有任何 class 必须保证的不变量。由于没有不变性,因此成员的所有可能值的组合都是有意义的,因此将它们设为私有(private)是没有意义的,因为没有什么需要保护的。

这样一个类的简单例子是

struct Point3d {
std::array<double, 3> coordinates;
};

由于 double 的每个三元组都是 R^3 中的一个点,因此隐藏数据没有任何好处。 (如果您害怕 NaNinfinity 值,这可能不是最好的主意。如果可能发生这种情况,您可能不想将其设为聚合。)

聚合类型的另一个示例是 std::array .同样,它只是某种类型和某种(不可变)长度的数组,因此没有要保护的不变量。

聚合的一个优势是 aggregate initialization .

关于c++ - 什么是聚合类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232288/

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