【问题标题】:why the size of the C++ class with enumerations declared is 1?为什么声明枚举的 C++ 类的大小为 1?
【发布时间】:2018-01-17 14:45:12
【问题描述】:
class test
{
public:
    enum t_number
    {
        ZERO,
        ONE
    };

    enum t_test
    {
        TWO,
        THREE
    };
};

为什么上面类的大小是1而不是8?

当我在 main() 中这样做时

cout << "value of enum"<< test::ONE

我得到的输出为 1。

这是否意味着为枚举分配了内存?

【问题讨论】:

  • 因为你只在你的类中声明了类型(没有成员)并且类的最小大小是 1。
  • 因为你没有任何成员变量。一个对象仍然需要占据某个位置,以便可寻址,所以它仍然是一个单字节,因此可以存储在内存中。
  • 你没有声明数据成员...
  • 为什么会是 8?它不包含任何数据。 C++ 不允许大小为 0 的对象(因为这会导致各种不好的事情,例如多个对象具有相同的地址和数组的行为超级怪异),因此 1 是理想的选择。

标签: c++ class memory enums


【解决方案1】:

只有数据有大小,你不是在你的类中设置数据,你是在定义数据的类型。

对于最近添加的第二部分,您要求显示 test::ONE,就像在 C 中一样,枚举是无符号整数的抽象,所以当您键入时:

enum foo {
    bar,
    baz,
    qux
};

和打字完全一样

enum foo {
    bar = 0,
    baz = 1,
    qux = 2
};

所以当你在 main 中输入这个时

cout << "value of enum"<< test::ONE;

您只是将您的 test::ONE 隐式转换为整数值。

请注意,c++11 中的枚举类不存在这种隐式转换。

【讨论】:

  • 公平地说,类型也有大小。你可以查询一个类型的大小,得到一个有意义的答案。
  • 你的意思是说“只有数据占用存储空间”。即使这样也有例外。
猜你喜欢
  • 1970-01-01
  • 2013-07-22
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2010-12-28
  • 2019-04-06
相关资源
最近更新 更多