|
CLI 中的枚举和标准 C++ 中有很大不同。在 CLI 中的枚举定义如:enum class Pork { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}; 注意,在 CLI 中的声明枚举类型的关键字是 enum class ,它并不是 enum 和 class 这两个关键字的组合,而是一个整体。使用 enum class 关键字还说明了像枚举中定义的常量 Jack,King 等是对象,而不是标准 C++ 枚举中那样仅仅是基本类型的值。在默认情况下,它们是 Int32 类型的对象,在试图使用这样一个常量之前,必须先把它强制转换成基本的 int 类型。
将枚举值赋值给变量:该语句将 Porker 枚举的值 Jack 赋值给 pork 变量。 Pork::Jack 这种形式表示 Jack 存在于枚举 Pork 的作用域内。
测试程序1:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
using namespace System;
enum class Pork { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King};
int main(array<System::String ^> ^args)
{
Pork pork = Pork::Jack;
Console::WriteLine(L"{0}", pork);
Console::ReadLine();
return 0;
}
输出是 Jack 。注意,Console::WriteLine(L"{0}", pork); 这种直接的输出方式在 Visual C++ 2012 里是视为错误的,不会输出 Jack 这个字串。如果想要输出相应的枚举常量整数值,就需要进行显示转换,因此可以修改上述的语句为:Console::WriteLine(L"{0}", safe_cast<int>(pork)); 。
也可以用下面的方法指定枚举常量的类型,这些类型包括:short, unsigned, int, long, long long, signed char, char 等:enum class Pork : { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King };
在 Visual Studio 2010 里还支持如下的枚举常量运算,如:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
using namespace System;
enum class Pork { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King};
int main(array<System::String ^> ^args)
{
Pork pork = Pork::Jack;
++pork;
Console::WriteLine(L"{0}", pork);
Console::ReadLine();
return 0;
}
输出为 Queen 。同样这样的运算方法不兼容 Visual C++ 2012 。
也可以对枚举值应用 + 或 - 运算符:注意不能写成 pork = pork - 2 ,因为减法运算符的操作数属于不同的类型(一个是类,一个是整数)且不能自动转换。为了可以运行,需要进行类型的强制转换:pork = safe_cast<Pork>(2); 上面将整数型强制转换为 Pork 类型,然后再参与运算是可行的。 |
|