静态 Const Int 链接不再是文本的

更新:2007 年 11 月

从 C++ 托管扩展到 Visual C++ 2008,类的常数成员的声明发生了更改。

尽管仍支持 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 (C++)