之间究竟有什么区别:
typedef enum {
something1,
something2,
.....
somethingN
} myEnum;
结束只是
enum myEnum{
something1,
something2,
.....
somethingN
};
我知道在第一种情况下,我有一个未命名的enum类型,当然,只是想知道哪种方法更好,为什么?
答案 0 :(得分:16)
第一个变体在C中很有用,因为否则你必须在任何你希望使用它的地方写enum myEnum
。
在C ++中并非如此。所以,AFAIK,C ++中的第一个案例没有任何好处(除非你定义了一个需要与C共享的接口)。
答案 1 :(得分:13)
没有区别。实际上,第一个版本是C风格的编码。
C ++ 11引入了stronly-typed enum,您将其定义为:
enum class myEnum //note the 'class' keyword after the 'enum' keyword
{
something1,
something2,
.....
somethingN
};
在C ++ 03中,枚举不是类型安全的,它们本质上是整数,并且可以隐式地与其他整数类型混合,而它们的另一个问题是它们没有范围;您可以使用其成员而无需限定其类型;你可以使用something1
。而C ++ 11强类型枚举是类型安全的,而且它们具有范围;你要使用myEnum::something1
。
答案 2 :(得分:1)
我不会使用第一个。它几乎与另一个相同。在C ++ 11中,使用第二个,您可以编写myEnum::something1
但不能编写第一个{{1}}。同样在C ++ 11中,你可以在某些情况下转发声明枚举,但是不可能对unamed类型进行前向声明,也不能转发声明typedef。