我认为枚举是静态的,const enum
是什么意思?
例如:
const typedef enum
{
NORMAL_FUN = 1,
GREAT_FUN = 2,
TERRIBLE_FUN = 3,
} Annoying;
我有一个旧程序,我被迫与之合作(来自设备制造商),我一直在使用const typedef enum
来定义枚举。
现在,我已经习惯了C#,所以我并不完全理解所有正在进行的C ++技巧,但这种情况似乎很简单。
从程序编码看来,Annoying
类型的变量似乎无论何时何地都会被改变。
它们并不意味着不变。长话短说,编译器不喜欢它。
此示例是在2010年之前的某个时间写回来的,所以这可能是某种版本差异,但const typedef enum
甚至意味着什么?
答案 0 :(得分:7)
这使得类型别名Annoying
不变,因此使用该类型别名声明的所有变量都是常量:
Annoying a = NORMAL_FUN;
a = GREAT_FUN; // Failure, trying to change a constant variable
答案 1 :(得分:3)
const typedef Type def;
和typedef const Type def;
意味着同样的事情,并且已有多年。关于Type
是enum
定义的情况没有什么特别之处,您也可以在其中看到它:
const typedef int const_int;
const_int i = 3;
i = 4; // error
答案 2 :(得分:1)
书写
typedef enum
{
NORMAL_FUN = 1,
GREAT_FUN = 2,
TERRIBLE_FUN = 3,
} Annoying;
具有enum
在C中运行良好的优势,它通过将typedef
引入 typedef命名空间来处理Annoying
。因此,enum
声明的提供者也可以将目标定为C.
使用const
限定符意味着您无法编写类似
Annoying foo = NORMAL_FUN;
foo = GREAT_FUN; // this will fail as `foo` is a `const` type.