【问题标题】:sizeof(blank class) == 1. why? [duplicate]sizeof(空白类) == 1. 为什么? [复制]
【发布时间】:2011-03-09 03:16:47
【问题描述】:

可能重复:
C++: What is the size of an object of an empty class?

#include <iostream>

class C
{
};

int main()
{
    std::cout << sizeof(C) << std::endl;

    return 0;
}

输出: 1

为什么是 1,而不是 0?

【问题讨论】:

    标签: c++


    【解决方案1】:
    【解决方案2】:

    因为 C++ 标准要求所有对象都具有非零大小。这有助于确保每个对象都有一个唯一的地址。

    【讨论】:

    • 你能引用一个参考。我问是因为我认为标准说每个对象都必须有一个唯一的地址。编译器保证这一点的简单方法是使每个对象的大小至少为 1。但我可能是错的。
    【解决方案3】:

    c++ 标准规定每个类/结构必须至少有 1 个字节。

    【讨论】:

    • 并非普遍正确。只有大多数派生对象需要具有非零大小。作为基类子对象的类实例的大小可能为零。
    • 基类是派生类的一部分,作为一个整体,它们必须至少有1个字节。您不能将对象划分为派生/基础部分,它们都属于一个类 - 派生。
    • 让我们谈谈对象,而不是类。基类子对象是派生对象的一部分,但您可以而且人们经常将其分为基类和派生类型。如果将派生对象传递给引用基类的函数,那么函数中可见的是派生对象的基类部分。来自标准:“基类子对象的大小可能为零。”。我认为这很清楚。
    • 如果你投射到一个子对象,它仍然至少有 1 个字节。也许更明智的说法是,如果这个 1 字节没有被空的基类使用,它可以被派生类使用。