Partager via


La liaison Static Const Int n'est plus littérale

La déclaration d'un membre constant d'une classe a été modifiée entre Extensions managées pour C++ et Visual C++ 2010.

Bien que les membres intégraux static const soient encore pris en charge, leur attribut de chaînage a été modifié. Leur précédent attribut de chaînage est désormais porté par un membre intégral littéral. Par exemple, considérons la classe Extensions managées suivante :

public __gc class Constants {
public:
   static const int LOG_DEBUG = 4;
};

Elle génère pour le champ les attributs CIL sous-jacents suivants (notez l'attribut littéral) :

.field public static literal int32 
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

Bien qu'elle continue à compiler sous la nouvelle syntaxe :

public ref class Constants {
public:
   static const int LOG_DEBUG = 4;
};

elle n'émet plus l'attribut littéral, et par conséquent n'est pas affichée comme une constante par le runtime CLR :

.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

Pour conserver le même attribut littéral d'un langage à l'autre, il faut transformer la déclaration en la donnée membre literal récemment prise en charge, comme suit,

public ref class Constants {
public:
   literal int LOG_DEBUG = 4;
};

Voir aussi

Référence

literal (Visual C++)

Concepts

Déclarations de membre dans une classe ou interface