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.)
Configuration 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