代码之家  ›  专栏  ›  技术社区  ›  xtofl Adam Rosenfield

在C++0x中,`typedef enum{}t`是否允许作用域枚举元素标识符?

  •  6
  • xtofl Adam Rosenfield  · 技术社区  · 16 年前

    我相信新的C++标准允许枚举类型的额外“范围”:

    enum E { e1, e2 };
    
    E var = E::e1;
    

    因为我知道很多源文件都包含旧的C样式enum typedef,所以我想知道新标准是否允许对这些匿名枚举类型使用typedef:

    typedef enum { d1, d2 } D;
    D var = D::d1; // error?
    
    1 回复  |  直到 15 年前
        1
  •  5
  •   David Rodríguez - dribeas    16 年前

    新标准将添加一个新类型的强枚举,但语法将略有不同,并且旧式枚举将兼容(C++03中的有效代码将是有效的C++0x代码),因此您不需要做任何事情来保持旧代码的有效性(不是typedef,也不是其他任何东西)。

    enum class E { e1, e2 }; // new syntax, use E::e1
    enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)
    

    有一个C++常见问题解答 here 处理这个特殊问题的。