普通枚举类型

枚举类定义时,同一作用域下不能定义相同的元素,如下所示,如果同时定义color1和color2,且color1和color2中的元素相同的话,编译会报错。

enum color1
{
	red,
	green,
};

enum color2
{
	red,
	green,
};

枚举类

如果使用枚举类定义的话,那么同一作用域下就可以定义相同的元素名。 enum class color1 { red, green, };

enum class color2
{
	red,
	green,
};

C++/CLI 枚举类

如果需要让定义的枚举类定义在CLI里,需要添加public关键字。C++11 在非托管代码中引入了 enum class 类型,这与 C++/CLI 中的托管 enum class 类型有很大不同。 特别是,C++11 enum class 类型不支持与 C++/CLI 中的托管 enum class 类型相同的运算符,并且 C++/CLI 源代码必须在托管 enum class 声明中提供可访问性说明符,以便将它们与非托管 (C++11) enum class 声明区分开来。C++/CX 和 C++/CLI 支持 public enum class 和 private enum class,它们与标准 C++ enum class 类似,不同之处在于增加了可访问性说明符。 在 /clr下,允许使用 C++11 enum class 类型,但会生成警告 C4472,这是为了确保你确认自己确实需要使用 ISO 枚举类型,而不是 C++/CX 和 C++/CLI 类型。

public enum class color1
{
	red,
	green,
};

color1 j = color1::red;
String ^ str = Enum::GetName(color1::typeid, j);