Freigeben über


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)