我刚刚在第 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 中的一个点,因此隐藏数据没有任何好处。 (如果您害怕 NaN
和 infinity
值,这可能不是最好的主意。如果可能发生这种情况,您可能不想将其设为聚合。)
聚合类型的另一个示例是 std::array
.同样,它只是某种类型和某种(不可变)长度的数组,因此没有要保护的不变量。
聚合的一个优势是 aggregate initialization .
关于c++ - 什么是聚合类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232288/