枚举类型宽度?

发布于 2024-10-29 09:20:41 字数 86 浏览 0 评论 0原文

快问。枚举类型的宽度是多少?它们是否具有表示枚举所需的最小宽度,或者所有枚举都是整数?如果它们是整数,您可以更改枚举的宽度还是必须为每次出现键入强制类型转换?

Quick question. How wide are enumerated types? Are they of the minimum width required to represent the enumeration or are all enums ints? If they're ints, can you change the width of enums or would you have to type cast for each occurrence?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

笨死的猪 2024-11-05 09:20:41

(这是针对 C++ 的)

来自标准:

枚举的基础类型
是一个整数类型,可以表示
中定义的所有枚举值
枚举。这是
实现定义的积分
type 用作基础类型
对于枚举,除了
底层类型不能大于
比 int 除非是枚举数的值
无法放入 int 或
无符号整数。如果枚举器列表
为空,底层类型就好像
枚举有一个
值为 0 的枚举器。 的值
sizeof() 应用于枚举
类型,枚举类型的对象,
或一个枚举器,是的值
sizeof() 应用于底层
类型。

在 C++0x 中,您可以如下定义枚举的基础类型:

enum foo : unsigned int { bar, baz };

另请注意,新的强类型枚举(“枚举类”)具有默认的 int 基础类型。

(This is for C++)

From the standard:

The underlying type of an enumeration
is an integral type that can represent
all the enumerator values defined in
the enumeration. It is
implementation-defined which integral
type is used as the underlying type
for an enumeration except that the
underlying type shall not be larger
than int unless the value of an enumerator
cannot fit in an int or
unsigned int. If the enumerator-list
is empty, the underlying type is as if
the enumeration had a single
enumerator with value 0. The value of
sizeof() applied to an enumeration
type, an object of enumeration type,
or an enumerator, is the value of
sizeof() applied to the underlying
type.

In C++0x you can define the underlying type of an enum like follows:

enum foo : unsigned int { bar, baz };

Also note that the new strongly typed enums ("enum class") have a default underlying type of int.

悲歌长辞 2024-11-05 09:20:41

在 C 和 C++ 中,它们是整数。类型转换不会对它们进行丝毫改变,除非将它们更改为更窄的整数类型(char、short)。

In C and C++ they're ints. Type casting will not change them in the slightest, unless you change them to a narrower integer type (char, short).

萌梦深 2024-11-05 09:20:41

对于您标记此问题的语言来说,这是不同的。
在 C 和 C++03 中,枚举的基础类型是实现定义的。在 C++0x 中,我们可以自己声明底层类型,称为强类型枚举(或枚举类):

// declares an enum with underlying type `unsigned char`
enum class MyEnum : unsigned char {/*...*/};

This is different for the languages you tagged this question with.
In C and C++03, the underlying type of an enum is implementation defined. In C++0x, we can declare the underlying type ourselfs, called strongly typed enums (or enum classes):

// declares an enum with underlying type `unsigned char`
enum class MyEnum : unsigned char {/*...*/};
醉生梦死 2024-11-05 09:20:41

在 C# 中,您可以指定基础类型,如果不指定,则默认为 Int32

public enum ThirtyTwoBitsWide
{
    This, Is, The, Default, Size
}

public enum EightBitsWide : byte
{
    Explicitly, Specify, The, Underlying, Size
}

In C# you can specify the underlying type, and if you don't specify then the default is Int32.

public enum ThirtyTwoBitsWide
{
    This, Is, The, Default, Size
}

public enum EightBitsWide : byte
{
    Explicitly, Specify, The, Underlying, Size
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文