【发布时间】:2015-08-04 16:56:00
【问题描述】:
什么时候可以使用常量和枚举?彼此有没有优势。
据我所知,编译器将两者都放入符号表中,这意味着两种方式都经过优化。
【问题讨论】:
标签: c++ enums constants compiler-optimization
什么时候可以使用常量和枚举?彼此有没有优势。
据我所知,编译器将两者都放入符号表中,这意味着两种方式都经过优化。
【问题讨论】:
标签: c++ enums constants compiler-optimization
常量可以是任何类型(int、float、struct 等)。
当您有一个相互排斥的项目列表时,枚举是很好的,并且不特别关心它们具有什么价值,只要它们是相互排斥的。枚举只是整数,所以不能有浮点枚举。
【讨论】:
差异实际上归结为程序员的可读性以及类型安全性。考虑:
enum class Months : unsigned short {
JAN = 1,
FEB,
MAR,
.
.
.
DEC
}; // compiler fills in the numbers for you.
typedef const int Month;
static Month JAN = 1;
static Month FEB = 2;
.
.
.
static Month DEC = 12;
请记住,常量也可以有任何类型,而您的枚举类型默认为 int 类型(尽管可以在 C++11 中更改)。
【讨论】:
如果使用的常量是 int,那么就编译器而言,它们实际上是相同的。然而,正如 user3470630 指出的那样,常量可以是任何类型,不像枚举总是整数。
但是,枚举在代码可读性方面可能具有优势,因为它们允许您定义一组相关且互斥的值。
【讨论】: