2012-05-17 64 views

回答

7

一种enum具有底层整数类型(用于存储enum的值的类型),并且enum值可以隐式转换到整数类型的值。

在你的情况下,基础类型为int,值为0.一切都没问题。

+5

请注意,在C++ 11中,这仅适用于无限制枚举。对于范围枚举('enum class'),没有隐式转换为整型。 –

0

这是绝对有效的,因为,作为GManNickG和西红柿说,所有枚举都是int类型(事实上,在C,Enum也整数,你可以将它们的范围值枚举。

typedef enum _foo 
{ 
    val1 = 57 
} foo; 
... 
foo f = 99; // compiles in C but not C++ 

事实上,因为枚举充当恒定整数值像0,-1,200,等等大多数编译器不会抱怨,如果该函数的参数类型是布尔或浮动或其他原语类型数...

我在说什么, ð虽然说的是,如果你有超过someFunc的签名控制,你想++,以确保用C没有无效的值传递中,将其更改为

void someFunc(SomeEnum a); 

更多类型安全

而且,总是至少初始化您的第一枚枚举值。我可能是错的,但是,在当天,编译器被允许为你的枚举选择一个任意的起始值。大多数时候它选择0但不总是。即使情况并非如此,它会使代码变得更加自我记录并且显而易见。

+2

我没有说他们都是'int',我说他们是整型。根据枚举器中的值,它们可能是'unsigned','(unsigned)long'或'(unsigned)long long'。 – GManNickG

相关问题