常量和枚举
Constant and enum
什么时候可以使用常量和枚举?彼此有什么优势吗。
据我所知,这两种方式都由编译器放在符号 table 中,因此这意味着两种方式都得到了优化。
常量可以是任何类型(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 指出的那样,常量可以是任何类型,不像枚举总是整数。
但是,在代码可读性方面,枚举可能是有利的,因为它们允许您定义一组相关且互斥的值。
什么时候可以使用常量和枚举?彼此有什么优势吗。
据我所知,这两种方式都由编译器放在符号 table 中,因此这意味着两种方式都得到了优化。
常量可以是任何类型(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 指出的那样,常量可以是任何类型,不像枚举总是整数。
但是,在代码可读性方面,枚举可能是有利的,因为它们允许您定义一组相关且互斥的值。