代码之家  ›  专栏  ›  技术社区  ›  c00000fd

不带大括号的枚举形式

  •  5
  • c00000fd  · 技术社区  · 7 年前

    enum

    enum ens en1, en2, en3;
    

    int n = en2;
    

    所以我的问题是,什么形式的 枚举 是吗?为什么 n 后来设置为 0 ?


    Live example

    enum ens en1, en2, en3;
    
    int main()
    {
        int n = en2;
    }
    

    3 回复  |  直到 7 年前
        1
  •  3
  •   user7860670    7 年前

    此示例不正确,因为枚举的声明必须包含参考底图类型或项列表。这也意味着它不能与变量声明相结合。固定变量:

    enum ens: int; // ens is a complete type at this point
    enum ens en1, en2, en3; // en1 en2 en3 are global variables of enum ens type
    
    // alternative "traditional" enum definition with empty list of items:
    enum ens{} en1, en2, en3;
    

    int n = en2; 制造 n 等于0,因为 en2

        2
  •  1
  •   Marcel    7 年前
    enum ens en1, en2, en3;
    

    变量声明 . 它宣称 类型 enum ens

    在指派

    int n = en2;
    

    en2 恰好有一个对应于整数值0的枚举值。

        3
  •  1
  •   Shafik Yaghmour    7 年前

    if we use /Za

    我们可以看出这是一个病态的 dcl.enum#2 :

    使用枚举键only enum声明的枚举类型是非作用域枚举,其枚举数是非作用域枚举数。 枚举基的类型说明符seq应命名整型;任何简历资格都将被忽略。 声明非作用域枚举的不透明枚举声明不应忽略枚举基

    增加了这一措辞 n2764 只要指定了基础类型,就允许向前声明枚举。

    有关为什么不允许在没有基础类型的情况下转发声明枚举的更多详细信息,请参见 Why must an enumeration's size be provided when it is forward declared?