【发布时间】:2020-08-04 03:42:25
【问题描述】:
在 11.6.1 中它说:
聚合是 [snip] 一个类
- 没有虚函数
- [剪辑]
这是为什么呢?为什么我们不希望聚合具有虚函数?设计原理是什么?
【问题讨论】:
-
似乎是一个历史性的决定。参考this answer的cmets。
在 11.6.1 中它说:
聚合是 [snip] 一个类
- 没有虚函数
- [剪辑]
这是为什么呢?为什么我们不希望聚合具有虚函数?设计原理是什么?
【问题讨论】:
聚合类是一个与 C 结构非常相似的概念。它们可以使用相同的初始化器列表语法进行初始化。如果您有虚函数,则需要额外的初始化来初始化支持虚函数所需的内部变量。
现在我们可以有带有初始化列表的类,但在 C++11 之前,使用初始化列表初始化它们的能力是一个主要区别。
这种差异对于某些 C 模式特别有用。考虑 Pthread 的PTHREAD_MUTEX_INITIALIZER。它是一个宏,它以这样一种方式初始化 Pthreads 互斥锁,即第一次尝试正确使用它会完成互斥锁初始化。这种模式在 C 中是微不足道的,并且希望它也能在 C++ 中工作。
非常非正式地说,聚合和 POD 类(现在是标准布局)是“所见即所得”的类。它们与 C 中的工作方式非常相似,允许大量的互操作性。
【讨论】: