Do C++ enums Start at 0?

后端 未结 3 1723
猫巷女王i
猫巷女王i 2020-12-03 04:07

If I have an enum that does not assign numbers to the enumerations, will it\'s ordinal value be 0? For example:

enum enumeration { ZERO,
                


        
3条回答
  •  遥遥无期
    2020-12-03 05:04

    Per that standard [dcl.enum]

    The enumeration type declared with an enum-key of only enum is an unscoped enumeration, and its enumerators are unscoped enumerators. The enum-keys enum class and enum struct are semantically equivalent; an enumeration type declared with one of these is a scoped enumeration, and its enumerators are scoped enumerators. The optional identifier shall not be omitted in the declaration of a scoped enumeration. The type-specifier-seq of an enum-base shall name an integral type; any cv-qualification is ignored. An opaqueenum-declaration declaring an unscoped enumeration shall not omit the enum-base. The identifiers in an enumerator-list are declared as constants, and can appear wherever constants are required. An enumeratordefinition with = gives the associated enumerator the value indicated by the constant-expression. If the first enumerator has no initializer, the value of the corresponding constant is zero. An enumerator-definition without an initializer gives the enumerator the value obtained by increasing the value of the previous enumerator by one.

    Emphasis mine

    So yes if you do not specify a start value it will default to 0.

    I would really like to see an answer that confirms this for C++, but I'd also like to know if an ordinal 0 holds even if I specify a value in the middle of an enum:

    This also works. It will start at 0 and increment up along the way. Then after the enum you assign the value to it will begin to increase from that value for the next ones.

提交回复
热议问题