literal (C++ Component Extensions)
Zmienna (członek danych) jest oznaczony jako literal w /clr kompilacji jest odpowiednikiem native static const zmienna.
Wszystkie platformy
Uwagi
(Nie są żadne uwagi dla tej funkcji języka, stosowane do wszystkich modułów wykonawczych).
Środowisko wykonawcze systemu Windows
Uwagi
(Istnieją nie uwagi dla tej funkcji języka, które dotyczą tylko obsługi Windows.)
Wymagania
Opcja kompilatora:/ZW
Uwagi
Członek danych oznaczony jako literalmusi być zainicjowany, gdy zgłoszone i wartość musi być stała integralną, enum lub typu ciąg.Konwersja z typu wyrażenia inicjowania typu const danych członka statycznego nie muszą wymagać konwersji zdefiniowane przez użytkownika.
Brak pamięci zarezerwowanej dla pola literal w czasie wykonywania; kompilator wstawia tylko jego wartości metadanych dla klasy.
Zmienna oznaczone static const nie będą dostępne w metadanych do innych kompilatorów.
Aby uzyskać więcej informacji, zobacz Static (C++) i const (C++).
literaljest słowem kluczowym kontekstowe.Zobacz Kontekstowe słowa kluczowe (C++ Component Extensions) Aby uzyskać więcej informacji.
Przykład
Ten przykład pokazuje, że literal oznacza zmienną static.
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
Poniżej przedstawiono przykładowe literału w metadanych wpływu:
// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
literal int lit = 0;
static const int sc = 1;
};
Należy zauważyć różnicę w metadanych dla sc i lit: modopt dyrektywa jest stosowana do sc, co oznacza że można zignorować przez inne kompilatory.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)
.field public static literal int32 lit = int32(0x0000000A)
Następujące próbki, napisane w języku C#, odwołania do metadanych, utworzony w poprzedniej próbki i prezentuje wpływ literal i static const zmiennych:
// 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ż
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego