【问题标题】:Sizeof enumerations枚举的大小
【发布时间】:2014-04-15 20:12:45
【问题描述】:

枚举类型的大小是多少?

int main()
{
enum boolean{fl,tr};
int sbool = sizeof(boolean);
boolean a=fl,b=tr;
cout<<"size of Bool Enum: "<<sbool<<endl;
enum months{jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};
int smon = sizeof(months);
cout<<"size of months enum: "<<smon<<endl;
}

我写了上面的代码,我得到了 sbool 和 smon 是 4。谁能解释为什么?

【问题讨论】:

  • 因为这是boolean 的大小,并且是您系统上合理的整数值。
  • 语言标准中没有指定大小。但是你可以使用scoped enumerations,并且可以为这些指定底层类型。

标签: c++ enumeration


【解决方案1】:

枚举的大小由实现定义。通常它们的大小等于 sizeof(int),因为在 C 中,枚举数的类型是 int。尽管即使在 C 枚举本身中也有实现定义的兼容类型。来自 C 标准

每个枚举类型都应该兼容char,一个有符号整数 类型,或无符号整数类型。类型的选择是 实现定义

在 C++ 中,枚举具有基础类型的大小。如果没有另外指定,您可以通过指定 enum-base 或使用具有基础类型 int 的范围枚举来使其固定。

【讨论】:

  • 这看起来像一个 C++ 问题。
  • 底层类型是什么意思?
  • @cuba 例如,您可以通过以下方式定义枚举 enum Color : char { R, G, B };这里 char 是底层类型。它将用于表示枚举的所有值。
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2023-01-18
  • 2012-03-15
  • 1970-01-01
相关资源
最近更新 更多