【问题标题】:What is the difference between declaring an enum with and without 'typedef'?声明带有和不带有'typedef'的枚举有什么区别?
【发布时间】:2011-02-13 13:25:14
【问题描述】:

在 C++ 中声明枚举的标准方法似乎是:

enum <identifier> { <list_of_elements> };

但是,我已经看到了一些声明,例如:

typedef enum { <list_of_elements> } <identifier>;

如果存在的话,它们之间有什么区别?哪一个是正确的?

【问题讨论】:

    标签: c++ enums declaration typedef


    【解决方案1】:

    C 兼容性。

    在 C 中,unionstructenum 类型必须在它们之前使用适当的关键字:

    enum x { ... };
    
    enum x var;
    

    在 C++ 中,这不是必需的:

    enum x { ... };
    
    x var;
    

    所以在 C 中,懒惰的程序员经常使用typedef 来避免重复自己:

    typedef enum x { ... } x;
    
    x var;
    

    【讨论】:

    • 只是想指出,我在这里并没有贬低地使用“懒惰”。
    • 确实,这是造就优秀程序员的品质之一 :)
    • 不耐烦和狂妄自大。
    • ROFL @Steve 你成功了! :D
    • @Soham:不是我,拉里·沃尔 :-)
    【解决方案2】:

    我相信不同之处在于,如果你使用标准 C

    enum <identifier> { list }
    

    您必须使用

    来调用它
    enum <identifier> <var>;
    

    与它周围的 typedef 一样,您可以只使用它来调用它

    <identifier> <var>;
    

    但是,我认为这在 C++ 中并不重要

    【讨论】:

      【解决方案3】:

      类似于@Chris Lutz 所说的:

      在旧 C 语法中,如果您只是声明:

      enum myEType {   ... };
      

      然后你需要将变量声明为:

      enum myEType myVariable;
      

      但是,如果你使用 typedef:

      typedef enum {   ... } myEType;
      

      那么你可以在使用类型时跳过枚举关键字:

      myEType myVariable;
      

      C++ 和相关语言已经取消了这个限制,但是在纯 C 环境中或由 C 程序员编写时,仍然很常见这样的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2016-11-26
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        相关资源
        最近更新 更多