枚举变量默认值?

时间:2011-07-27 10:23:08

标签: c++ variables enums default-value

问题很简单:

#include <iostream>

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4
};

int main() {
    SomeEnum enummy;
    std::cout << (int)enummy;
}

输出是什么?

注意:这是访谈,这是我以前的开发人员继承的代码。这里的流操作符就是例如,实际继承的代码没有它。

2 个答案:

答案 0 :(得分:50)

该计划有Undefined Behavior。 enummy的值是不确定的。从概念上讲,您的代码与以下代码之间没有区别:

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

如果您在命名空间范围内定义了变量,那么它的值将初始化为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的任何枚举值不同,不要感到惊讶。每个枚举类型都有一个基础整数类型(例如intshortlong),该枚举类型的对象的可能值集是一组值,基础积分类型有。枚举只是一种方便地命名某些值并创建新类型的方法,但是您不会通过枚举器值的集合来限制枚举值。

更新: 支持我的一些引言:

  

零初始化T类型的对象意味着:
       - 如果T是标量类型(3.9),则将对象设置为值0   (零)转换为T;

请注意,枚举是标量类型。

  

对T类型的对象进行值初始化意味着:
- 如果T是类类型   blah blah
- 如果T是非工会阶级   输入等等等等    - 如果T是数组类型,那么等等等等 -   否则,该对象为零初始化

所以,我们进入其他方面。命名空间范围对象是值初始化的

答案 1 :(得分:0)

输出将是不确定的。 enummy成员变量只能是1或4.