MGNeo Asked:2020-03-11 19:35:36 +0800 CST2020-03-11 19:35:36 +0800 CST 2020-03-11 19:35:36 +0800 CST C++,关于枚举类对象初始化的问题 772 考虑以下代码: enum class Variants { FIRST = -1, SECOND = 1 }; Variants variant{}; 请告诉我什么和为什么应该在variant指定初始化之后? 实验表明invariant为0。虽然枚举中没有这个元素。 c++ 2 个回答 Voted HolyBlackCat 2020-03-11T21:59:05+08:002020-03-11T21:59:05+08:00 enum class默认基础类型int是. 所以 a 的任何值int都可以存储在其中。 即使enum没有指定底层类型是正常的,0它仍然是一个有效值。任何数字都适合这样的枚举,该枚举适合最小长度的位字段,足以表示该枚举的所有元素(似乎如果没有负元素,那么虚构的位字段是无符号的)。 Best Answer AR Hovsepyan 2020-03-11T20:32:57+08:002020-03-11T20:32:57+08:00 在这种情况下,枚举的成员是整数命名常量 FIRST 和 SECOND,但类型实例可以采用其他值: Variants variant = Variants{ 12 }; variant = Variants(0); 在后一种情况下,它实际上被初始化为默认值,因为整数类型的位默认初始化为零。 变体变体{};这是类似的初始化 _ 使用默认值初始化变体。唯一的区别是除了 Variants{-1} 和 Variants{1} 之外,所有其他常量都将不命名。
enum class
默认基础类型int
是. 所以 a 的任何值int
都可以存储在其中。即使
enum
没有指定底层类型是正常的,0
它仍然是一个有效值。任何数字都适合这样的枚举,该枚举适合最小长度的位字段,足以表示该枚举的所有元素(似乎如果没有负元素,那么虚构的位字段是无符号的)。在这种情况下,枚举的成员是整数命名常量 FIRST 和 SECOND,但类型实例可以采用其他值:
在后一种情况下,它实际上被初始化为默认值,因为整数类型的位默认初始化为零。
变体变体{};这是类似的初始化 _ 使用默认值初始化变体。唯一的区别是除了 Variants{-1} 和 Variants{1} 之外,所有其他常量都将不命名。