问题很简单:

#include <iostream>

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

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

输出是什么?

注意:这不是一次采访,这是我从以前的开发人员那里继承的代码。这里的流运算符只是举例,实际的继承代码没有它。

最佳答案

该程序具有Undefined Behavior。美味的值(value)是不确定的。从概念上讲,您的代码与以下代码没有区别:

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),并且该枚举类型的对象的可能值的集合就是该基础整数类型具有的值的集合。枚举只是一种方便地命名某些值并创建新类型的方法,但您不必通过枚举器值的集合来限制枚举的值。

更新:一些引用支持我:



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



因此,我们进入其他部分。并且命名空间范围的对象是值初始化的

10-07 19:23
查看更多