首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在声明枚举时,是否应该强制256个以下实体的类型为字节?

在声明枚举时,是否应该强制256个以下实体的类型为字节?
EN

Stack Overflow用户
提问于 2009-03-15 23:46:26
回答 6查看 40.8K关注 0票数 49

如果您的应用程序中有一个枚举,而您只有几个项,那么您是否应该强制底层类型成为尽可能小的类型?

代码语言:javascript
运行
复制
    enum smaller : byte
    {
        one,
        two,
        three
    };
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-03-15 23:48:12

不是的。不要过早地优化,除非您已经通过分析器证明了这实际上是一个问题。

票数 49
EN

Stack Overflow用户

发布于 2009-03-16 00:04:19

与最佳实践相关的

如果您没有特殊的理由将枚举设置为byte类型,则应该将其保留为默认值。

任何时候在switch语句中使用枚举时,对于无效的枚举值都应该有一个"default“子句。因此,无论是检查256-NumRealEnumValues还是2^32-NumRealEnumValues都没有关系。两者都将有一个默认的子句来处理所有无效的情况。

显式设置枚举类型的一个原因是,如果您希望您的枚举对应于程序中的另一种类型,并且需要在它们之间进行显式强制转换。

将类型更改为最小拟合也不会帮助您解决版本控制问题。除非您精确地填写了枚举的最大大小。我所说的版本控制问题是指,当您有一个使用枚举的已编译dll,然后添加一个新的枚举值时,一些代码可能会执行,而这些代码不应该出现在switch语句的"default“子句中。

与效率相关的

不,将其设置为字节在效率方面没有任何好处。

int的使用效率更高,因为x86上的cpu有32位寄存器。复制到寄存器中是一次复制32位。

当您使用较小的类型时,您必须将寄存器的一部分清零,并复制到寄存器的其余低阶位。

票数 32
EN

Stack Overflow用户

发布于 2009-03-16 00:14:10

这样做的唯一原因是,如果您使用定义的协议存储或传输此值,该协议要求字段具有该大小。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/648823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档