静态 Const Int 链接不再是文本的
从 C++ 托管扩展到 Visual C++ 2010,类的常数成员的声明发生了更改。
尽管仍支持 static const 整型成员,但其链接特性已经更改。 它们以前的链接特性现在放置在整型成员中。 例如,请考虑以下托管扩展类:
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
此代码为字段生成下列基础 CIL 特性(请注意文本特性):
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
当此代码仍在新语法中编译时:
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
它不再发出文本特性,因此未被 CLR 运行时视为常数:
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
为了使各语言间的文本特性相同,则该声明应更改为新的受支持的 literal 数据成员,如下所示,
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};