【发布时间】:2011-02-13 13:25:14
【问题描述】:
在 C++ 中声明枚举的标准方法似乎是:
enum <identifier> { <list_of_elements> };
但是,我已经看到了一些声明,例如:
typedef enum { <list_of_elements> } <identifier>;
如果存在的话,它们之间有什么区别?哪一个是正确的?
【问题讨论】:
标签: c++ enums declaration typedef
在 C++ 中声明枚举的标准方法似乎是:
enum <identifier> { <list_of_elements> };
但是,我已经看到了一些声明,例如:
typedef enum { <list_of_elements> } <identifier>;
如果存在的话,它们之间有什么区别?哪一个是正确的?
【问题讨论】:
标签: c++ enums declaration typedef
C 兼容性。
在 C 中,union、struct 和 enum 类型必须在它们之前使用适当的关键字:
enum x { ... };
enum x var;
在 C++ 中,这不是必需的:
enum x { ... };
x var;
所以在 C 中,懒惰的程序员经常使用typedef 来避免重复自己:
typedef enum x { ... } x;
x var;
【讨论】:
我相信不同之处在于,如果你使用标准 C
enum <identifier> { list }
您必须使用
来调用它enum <identifier> <var>;
与它周围的 typedef 一样,您可以只使用它来调用它
<identifier> <var>;
但是,我认为这在 C++ 中并不重要
【讨论】:
类似于@Chris Lutz 所说的:
在旧 C 语法中,如果您只是声明:
enum myEType { ... };
然后你需要将变量声明为:
enum myEType myVariable;
但是,如果你使用 typedef:
typedef enum { ... } myEType;
那么你可以在使用类型时跳过枚举关键字:
myEType myVariable;
C++ 和相关语言已经取消了这个限制,但是在纯 C 环境中或由 C 程序员编写时,仍然很常见这样的代码。
【讨论】: