静态 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;
};

请参见

参考

literal (Visual C++)

概念

类或接口中的成员声明