枚举variables的默认值?

问题很简单:

#include <iostream> enum SomeEnum { EValue1 = 1, EValue2 = 4 }; int main() { SomeEnum enummy; std::cout << (int)enummy; } 

输出是什么?

注:这不是一个采访,这是我从以前的开发人员inheritance的代码。 这里的stream操作符只是例子,实际的inheritance代码没有它。

该程序有未定义的行为 。 enummy的值是不确定的。 从概念上说,你的代码和下面的代码没有区别:

 int main() { int i; //indeterminate value std::cout << i; //undefined behavior }; 

如果你已经在命名空间范围内定义了你的variables,它的值将被初始化为0。

 enum SomeEnum { EValue1 = 1, EValue2 = 4, }; SomeEnum e; // e is 0 int i; // i is 0 int main() { cout << e << " " << i; //prints 0 0 } 

不要惊讶的是, e可以具有与SomeEnum的任何枚举值不同的值。 每个枚举types都有一个基本的整型(例如intshortlong ),并且该枚举types的对象的可能值集合是基础整型所具有的值集合。 枚举只是方便地命名一些值并创build一个新types的一种方式,但是您不会通过枚举值的集合来限制枚举的值。

更新:一些引用支持我:

要初始化Ttypes的对象意味着:
– 如果T是标量types(3.9),则将该对象设置为转换为T的0(零)值;

请注意,枚举是标量types。

为了初始化Ttypes的对象,意味着:
– 如果T是一个class级types等等等等
– 如果T是一个非工会types的等等等等
– 如果T是一个数组types,那么等等 – 否则,该对象是零初始化的

所以,我们进入其他部分。 并且命名空间范围的对象被初始化

输出将是不确定的。 成员variables只能是1或4。