Freigeben über


literal (Komponentenerweiterungen für C++)

Eine Variable (Datenmember) gekennzeichnet als literal in ein /clr Kompilierung ist das systemeigene Äquivalent der ein static const Variable.

Alle Plattformen

Hinweise

(Es gibt keine Kommentare für diese Sprache-Funktion, die für alle Laufzeiten gelten.)

Windows-Runtime

Hinweise

(Es gibt keine Kommentare für diese Sprache-Funktion, die für die Windows-Runtime gelten.)

5yzft952.collapse_all(de-de,VS.110).gifAnforderungen

Compiler-Option:/ZW

Hinweise

Ein Datenelement markiert als literalmuss initialisiert werden, wenn deklariert und der Wert muss eine Konstante Integral, Enumeration oder String-Typ.Konvertierung vom Typ des Initialisierungsausdrucks in den Typ des statischen const-Datenmembers muss eine benutzerdefinierte Konvertierung nicht erforderlich.

Kein Arbeitsspeicher ist für literales Feld Laufzeit; der Compiler fügt nur den Wert in den Metadaten für die Klasse.

Markiert eine Variable static const werden nicht in den Metadaten zu anderen Compilern verfügbar.

Weitere Informationen finden Sie unter Statisch (C++) und const-Feld (C++).

literalist ein kontextbezogene Schlüsselwort.Weitere Informationen finden Sie unter Kontextbezogene Schlüsselwörter (Komponentenerweiterungen für C++).

Beispiel

Dieses Beispiel zeigt, dass ein literal Variable impliziert static.

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

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

Das folgende Beispiel zeigt die Auswirkungen von literalen in Metadaten:

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

Beachten Sie den Unterschied in den Metadaten für sc und lit: die modopt Richtlinie gilt für sc, d. h. es kann von anderen Compilern ignoriert werden.

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

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

Im folgende Beispiel wird in c# verfasst verweist auf die Metadaten, die im vorherigen Beispiel erstellt und zeigt die Auswirkungen von literal und static const Variablen:

// 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);
   }
}

Anforderungen

Compiler-Option:/clr

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen