我有以下代码

class nest_empty
{
   class empty{};
};
nest_empty的大小是否为1(在我的实现中,空类的sizof为1)?如果是,为什么?可以将nest_empty视为一个空类吗?

编辑:
class nest_empty
{
   class empty{};
   empty d;
};
nest_empty的大小是否仍为1?如果是,为什么?

最佳答案

您的nest_empty的第一个版本是一个空类(没有非静态数据成员,也没有非空基数),因此,如果它们在实现中的大小为1,则其大小为1。

“为什么”是因为空类的实现大小为1,这又是因为它们不能大小为0(标准禁止),而实现者选择了1。

您的第二个nest_empty不是一个空类(它具有一个非静态数据成员)。它的合法大小可以为1,因为其唯一的非静态数据成员d的类型为empty,它是一个空类,因此大小可能为1。

但是,我无法告诉您它在实现中实际上是否具有大小1。询问您的编译器。

关于c++ - 嵌套空类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4256458/

10-11 23:11