靜態 Const 整數連結不再是常值
從 Managed Extensions for C++ 升級為 Visual C++ 之後,類別的常數成員宣告已變更。
雖然還是支援 static const 整數成員,但它們的連結屬性 (Attribute) 已有所變更。 舊的連結屬性現在包含在常值 (Literal) 整數成員中。 例如,請考慮下列 Managed Extensions 類別:
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;
};