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