2016-09-15 80 views
0

我以为枚举是静态的,const enum有什么意义?在C++中声明“const typedef enum”是否有效?

例如:

const typedef enum 
{ 
    NORMAL_FUN = 1, 
    GREAT_FUN = 2, 
    TERRIBLE_FUN = 3, 
} Annoying; 

我有一个旧的程序掉在我的头上,我被迫与(从设备制造商)合作,我不断跨越枚举来跟const typedef enum被定义。

现在,我已经习惯了C#,所以我不完全理解所有C++技巧,但这种情况似乎很简单。

从程序的编码中看来,类型Annoying的变量会随时随地改变。

它们并不意味着不变。长话短说,编译器不喜欢它。

此示例在2010年之前的某个时间写回,因此这可能是某种版本差异,但是const typedef enum甚至意味着什么?

+7

谁写的是真的很喜欢噪音。更别说废话了。 –

+0

什么是我的脑袋混乱的是,我编译的二进制文件,按照期望工作,以及我被强制使用的源代码(踢和尖叫),但不知何故,我有恼人的变量显然修改。我习惯于C++程序充满了神秘的诡计,这可能是最近修补过的一些奥术,或者是在构建二进制文件后破坏源代码的结果。 –

回答

6

这使得类型的别名Annoying恒定,从而与该类型,别名声明的所有变量都是常数:

Annoying a = NORMAL_FUN; 
a = GREAT_FUN; // Failure, trying to change a constant variable 
+0

对我来说够好。我猜测没有任何其他含义,并且在有人在所有地方向其中添加“const”来刺激代码之前创建了工作二进制文件。 –

3

const typedef Type def;typedef const Type def;意思是一样的,并有多年。有什么特别的地方Typeenum定义的情况是,你可以在太看出来:

const typedef int const_int; 
const_int i = 3; 
i = 4; // error 
1

写作

typedef enum 
{ 
    NORMAL_FUN = 1, 
    GREAT_FUN = 2, 
    TERRIBLE_FUN = 3, 
} Annoying; 

enum在c工作很好的优势太大,它处理typedefAnnoying引入typedef命名空间。所以enum声明的提供商可以也靶向C.

使用const预选赛意味着你可以不写代码像

Annoying foo = NORMAL_FUN; 
foo = GREAT_FUN; // this will fail as `foo` is a `const` type.