literal
(C++/CLI)
Zmienna (składowa danych) oznaczona jako literal
w /clr
kompilacji jest stałą czasu kompilacji. Jest to natywny odpowiednik zmiennej C# const
.
Wszystkie platformy
Uwagi
(Nie ma żadnych uwag dotyczących tej funkcji językowej, która ma zastosowanie do wszystkich środowisk uruchomieniowych).
Środowisko wykonawcze systemu Windows
Uwagi
(Nie ma żadnych uwag dotyczących tej funkcji językowej, które mają zastosowanie tylko do środowisko wykonawcze systemu Windows).
środowiska uruchomieniowe w trakcie wykonania
Uwagi
Element członkowski danych oznaczony jako literal
musi zostać zainicjowany po zadeklarowaniu. Wartość musi być stałym typem całkowitym, wyliczeniowym lub ciągowym. Konwersja z typu wyrażenia inicjalizacji na typ literal
elementu członkowskiego danych nie może wymagać konwersji zdefiniowanej przez użytkownika.
Żadna pamięć nie jest przydzielana dla literal
pola w czasie wykonywania; kompilator wstawia tylko jego wartość w metadanych klasy. Wartość literal
jest traktowana jako stała czasu kompilacji. Najbliższy odpowiednik standardowego języka C++ to constexpr
, ale element członkowski danych nie może znajdować się constexpr
w języku C++/cli.
Zmienna oznaczona jako literal
różni się od jednej oznaczonej .static const
Element static const
członkowski danych nie jest udostępniany w metadanych innym kompilatorom. Aby uzyskać więcej informacji, zobacz tematy static
oraz const
.
literal
jest kontekstowym słowem kluczowym. Aby uzyskać więcej informacji, zobacz Kontekstowe słowa kluczowe.
Przykłady
W tym przykładzie pokazano, że zmienna literal
oznacza static
wartość .
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
Poniższy przykład przedstawia efekt literal
w metadanych:
// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
literal int lit = 0;
static const int sc = 1;
};
Zwróć uwagę na różnicę w metadanych i sc
lit
: modopt
dyrektywa jest stosowana do sc
metody , co oznacza, że można ją zignorować przez inne kompilatory.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)
Poniższy przykład, utworzony w języku C#, odwołuje się do metadanych utworzonych w poprzednim przykładzie i pokazuje efekt literal
zmiennych i static const
:
// 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);
}
}
Wymagania
Opcja kompilatora: /clr
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows