Udostępnij za pośrednictwem


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