Die Bindung von static const int-Membern ist nicht mehr literal
Die Deklaration eines konstanten Members einer Klasse hat sich in Visual C++ gegenüber Managed Extensions for C++ geändert.
Zwar werden ganzzahlige static const-Member weiterhin unterstützt, jedoch hat sich ihr Bindungsattribut geändert. Ihr früheres Bindungsattribut ist jetzt Teil eines literalen, ganzzahligen Members. Betrachten Sie z. B. die folgende Managed Extensions-Klasse:
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
Damit werden die folgenden zugrunde liegenden CIL-Attribute für das Feld generiert (beachten Sie das literale Attribut):
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Dagegen wird folgende Klasse unter der neuen Syntax immer noch kompiliert:
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
Das literale Attribut wird nicht mehr ausgegeben und deshalb von der CLR-Laufzeit auch nicht als Konstante behandelt:
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Um das gleiche, sprachenübergreifende literale Attribut zu erhalten, müssen Sie die Deklaration in den neu unterstützten literal-Datenmember ändern:
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};
Siehe auch
Referenz
literal (Komponentenerweiterungen für C++)
Konzepte
Memberdeklarationen innerhalb einer Klasse oder Schnittstelle (C++/CLI)