Partager via


littéral (extensions du composant C++)

Variable (membre de données) est marqué comme literal dans un /clr compilation est l'équivalent natif d'un static const variable.

Toutes les plates-formes

Remarques

(Il n'existe aucune Remarques pour cette fonctionnalité de langage qui s'appliquent à tous les runtimes.)

Windows Runtime

Remarques

(Il n'existe aucune Remarques pour cette fonctionnalité de langage qui s'appliquent uniquement au runtime de Windows.)

5yzft952.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur :/ZW

Notes

Un membre de données marqué comme literaldoit être initialisée lorsque déclarée et la valeur doit être une constante intégrale, enum ou type de chaîne.Conversion du type de l'expression d'initialisation pour le type de données-membres const static ne doit pas exiger une conversion définie par l'utilisateur.

Aucune mémoire est allouée pour le champ littéral lors de l'exécution ; le compilateur n'insère que sa valeur dans les métadonnées pour la classe.

Une variable marquée static const ne seront pas disponibles dans les métadonnées à d'autres compilateurs.

Pour plus d'informations, consultez Static (C++) et const (C++).

literalest un mot-clé contextuel.Consultez Mots clés contextuels (extensions du composant C++) pour plus d'informations.

Exemple

Cet exemple montre qu'une literal variable implique static.

// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
   literal int i = 4;
};

int main() {
   int value = X::i;
}

L'exemple suivant illustre l'effet de littéral dans les métadonnées :

// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
   literal int lit = 0;
   static const int sc = 1;
};

Notez la différence dans les métadonnées pour sc et lit: le modopt directive est appliquée à sc, ce qui signifie qu'il peut être ignoré par d'autres compilateurs.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)

.field public static literal int32 lit = int32(0x0000000A)

L'exemple suivant, écrit en c#, référence les métadonnées créées dans l'exemple précédent et montre l'effet de literal et static const variables :

// mcppv2_literal3.cs
// compile with: /reference:mcppv2_literal2.dll
// A C# program
class B {
   public static void Main() {
      // OK
      System.Console.WriteLine(A.lit);
      System.Console.WriteLine(A.sc);

      // C# does not enforce C++ const
      A.sc = 9;
      System.Console.WriteLine(A.sc);

      // C# enforces const for a literal
      A.lit = 9;   // CS0131

      // you can assign a C++ literal variable to a C# const variable
      const int i = A.lit;
      System.Console.WriteLine(i);

      // but you cannot assign a C++ static const variable
      // to a C# const variable
      const int j = A.sc;   // CS0133
      System.Console.WriteLine(j);
   }
}

Configuration requise

Option du compilateur :/clr

Voir aussi

Concepts

Extensions de composant pour les plateformes Runtime