我最近注意到一个对我来说非常令人惊讶的事实:
您显然可以从enum
类型中检索任意值,并将其分配给enum
变量,即使它不属于enum
定义(我称之为“鬼值”) 。该变量只取相应的整数值。
示例:
#include <iostream>
enum myEnumType { ONE = 1, TWO = 2, THREE = 3 };
int main () {
myEnumType e;
e=myEnumType(8);
std::cout << e << std::endl;
}
输出8
。
我原本以为这是不可能的,因为在我看来,与枚举类型的约束功能不一致。 原因是什么,最重要的是,这可能是什么用途?
答案 0 :(得分:3)
您被允许将int
投射到enum
。 C ++ 11引入了“枚举类”或“强枚举”或“范围枚举”来处理这个问题。
其他好处包括其范围和允许前瞻性声明。
Stroustrup的页面上有很多细节,他特别提到了传统枚举的三个问题:
答案 1 :(得分:0)
您正在调用传递8的枚举的构造函数,因此分配给该实例的值为8.
当你调用枚举默认构造函数时会发生同样的事情,它将0设置为默认值。
myEnumType e = myEnumType();
std::cout << e << std::endl; // prints 0
It prints 0(尽管枚举仅用ONE = 1,TWO = 2,THREE = 3初始化),这里更好地解释:http://lifecs.likai.org/2010/07/c-enum-default-constructor.html