literal
(C++/CLI)
Eine Variable (Datenmemmemm), die als literal
/clr
Kompilierung gekennzeichnet ist, ist eine Kompilierungszeitkonstante. Es ist das systemeigene Äquivalent einer C# const
-Variablen.
Alle Plattformen
Hinweise
(Es gibt keine Hinweise für diese Sprachfunktion, die für alle Laufzeiten gültig sind.)
Windows-Runtime
Hinweise
(Es gibt keine Hinweise für diese Sprachfunktion, die nur für Windows-Runtime gelten.)
Übersicht: Common Language Runtime (CLR)
Hinweise
Ein Datenmememm, das als literal
"initialisiert" gekennzeichnet ist, muss bei der Deklaration initialisiert werden. Und der Wert muss ein konstanter Integral-, Enumerations- oder Zeichenfolgentyp sein. Die Konvertierung vom Typ des Initialisierungsausdrucks in den Typ des literal
Datenmemers kann keine benutzerdefinierte Konvertierung erfordern.
Es wird kein Arbeitsspeicher für das literal
Feld zur Laufzeit zugewiesen. Der Compiler fügt seinen Wert nur in die Metadaten für die Klasse ein. Der literal
Wert wird als Kompilierungszeitkonstante behandelt. Die nächstgelegene Entsprechung in Standard C++ ist constexpr
, aber ein Datenmemmemm kann sich nicht in C++/CLI befinden constexpr
.
Eine Variable, die markiert ist, literal
unterscheidet sich von einer markierten static const
. Ein static const
Datenmememm wird in Metadaten für andere Compiler nicht zur Verfügung gestellt. Weitere Informationen finden Sie unter static
und const
.
literal
ist ein kontextbezogenes Schlüsselwort. Weitere Informationen finden Sie unter Kontextabhängige Schlüsselwörter.
Beispiele
Dieses Beispiel zeigt, dass eine 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 Auswirkung in literal
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
-Anweisung gilt für sc
, d.h. sie kann von anderen Compilern ignoriert werden.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)
Im folgenden Beispiel, das in C# erstellt wurde, wird auf die metadaten verwiesen, die im vorherigen Beispiel erstellt wurden, und es werden die Auswirkungen und literal
static const
Variablen gezeigt:
// 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
Compileroption: /clr