C ++ typedef枚举,只是枚举

时间:2012-03-27 15:49:28

标签: c++ typedef

之间究竟有什么区别:

typedef enum {
  something1,
  something2,
  .....
  somethingN
} myEnum;

结束只是

enum myEnum{
  something1,
  something2,
  .....
  somethingN
};

我知道在第一种情况下,我有一个未命名的enum类型,当然,只是想知道哪种方法更好,为什么?

3 个答案:

答案 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。