在C++中,为什么虚拟函数取消类类型作为聚合的资格



11.6.1中说:

聚合是带有的类

  • 没有虚拟函数
  • [snip]

为什么?为什么我们不希望聚合具有虚拟函数?设计原理是什么?

聚合类是一个与C结构非常相似的概念。它们可以使用相同的初始化器列表语法进行初始化。如果您拥有虚拟函数,则需要额外的初始化来初始化支持虚拟函数所需的内部变量。

现在我们可以有带有初始化器列表的类,但在C++11之前,用初始化器列表初始化它们的能力是一个主要区别。

这种差异对于某些C模式特别有用。考虑Pthread的PTHREAD_MUTEX_INITIALIZER。它是一个初始化Pthreads互斥体的宏,其方式是第一次尝试正确使用它时就完成了互斥体初始化。这种模式在C中是微不足道的,人们希望它也能在C++中工作。

非正式地说,Aggregate和POD类(以及现在的标准布局(是";你所见即所得"类。它们与C中的工作方式非常相似,允许大量的互操作性。

最新更新