常数和枚举

时间:2015-08-04 16:56:01

标签: c++ enums constants compiler-optimization

什么时候能使用常量和枚举?相互之间是否有任何优势。

据我所知,编译器都将它们放在符号表中,这意味着两种方式都得到了优化。

3 个答案:

答案 0 :(得分:1)

常量可以是任何类型(int,float,struct等)。

当您拥有互斥项目列表时,枚举很好,并且只要它们是互斥的,就不要特别关心它们具有什么价值。枚举只是整数,因此您不能使用浮点枚举。

答案 1 :(得分:0)

差异实际上取决于程序员的可读性以及类型安全性。考虑:

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中更改)。

答案 2 :(得分:0)

如果使用的常量是int,那么就编译器而言它们实际上是相同的。但是,正如user3470630指出的那样,常量可以是任何类型,而不像枚举总是整数。

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