因此,请考虑以下结构:
struct CType
{
enum DType
{
Int,
Char
} Type;
union Value
{
int num;
char alpha;
Value() {
this->num = 0;
this->alpha = '\0';
};
~Value() {};
} value;
};
我该怎么做?
CType u3;
u3.Type = CType::Int;
以上为什么起作用?
我本可以这样做:
u3.Type = CType::DType::Int;
谢谢。
答案 0 :(得分:3)
DType
是一个无范围的枚举,在其范围内可见:
无范围枚举(重点是我的)-C ++ 11之前的版本:
每个枚举器都成为枚举类型(即名称)的命名常量,在封闭范围内可见,并且可以在需要常量时使用。
您正在寻找作用域枚举(自C ++ 11起可用):
每个枚举器成为枚举类型(即名称)的命名常量,包含在枚举范围内,并且可以使用范围解析运算符进行访问。尽管可以使用static_cast获取枚举器的数值,但从范围限定的枚举器的值到整数类型没有隐式转换。
请参阅文档:https://en.cppreference.com/w/cpp/language/enum
因此,DType
作为范围枚举为:
enum class DType { Int, Char };
,其中的Int
可以这样访问:
DType::Int
答案 1 :(得分:2)
从历史上看,这就是枚举的工作方式。
用“枚举类”代替“枚举”,可以提高安全性和所需的访问语法。