常量和枚举

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 指出的那样,常量可以是任何类型,不像枚举总是整数。

但是,在代码可读性方面,枚举可能是有利的,因为它们允许您定义一组相关且互斥的值。