嵌套的空类

Pra*_*rav 5 c++

我有以下代码

class nest_empty
{
   class empty{};
};
Run Code Online (Sandbox Code Playgroud)

大小nest_empty是1(在我的实现sizof空类是1)?如果是,为什么?可以nest_empty算是一个空类吗?

编辑:

class nest_empty
{
   class empty{};
   empty d;
};
Run Code Online (Sandbox Code Playgroud)

尺寸nest_empty仍然是1?如果是,为什么?

Ste*_*sop 6

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

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

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

但是,我不能告诉你它实际上是否会有1的大小.问你的编译器.