Bagikan melalui


literal (C++/CLI)

Variabel (anggota data) yang ditandai sebagai literal dalam /clr kompilasi adalah konstanta waktu kompilasi. Ini setara dengan variabel C# const asli.

Semua Platform

Keterangan

(Tidak ada keterangan untuk fitur bahasa ini yang berlaku untuk semua runtime.)

Windows Runtime

Keterangan

(Tidak ada keterangan untuk fitur bahasa ini yang hanya berlaku untuk Windows Runtime.)

Runtime Bahasa Umum

Keterangan

Anggota data yang ditandai sebagai literal harus diinisialisasi saat dinyatakan. Dan, nilainya harus merupakan jenis integral, enum, atau string yang konstan. Konversi dari jenis ekspresi inisialisasi ke jenis literal anggota data tidak dapat memerlukan konversi yang ditentukan pengguna.

Tidak ada memori yang dialokasikan untuk literal bidang pada runtime; pengkompilasi hanya menyisipkan nilainya dalam metadata untuk kelas . Nilai literal diperlakukan sebagai konstanta waktu kompilasi. Yang paling setara dalam Standard C++ adalah constexpr, tetapi anggota data tidak dapat berada constexpr di C++/CLI.

Variabel yang ditandai sebagai literal berbeda dari satu yang ditandai static const. static const Anggota data tidak tersedia dalam metadata untuk pengkompilasi lain. Untuk informasi lebih lanjut, lihat static dan const.

literal adalah kata kunci yang sensitif terhadap konteks. Untuk informasi selengkapnya, lihat Kata kunci peka konteks.

Contoh

Contoh ini menunjukkan bahwa literal variabel menyiratkan static.

// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
   literal int i = 4;
};

int main() {
   int value = X::i;
}

Contoh berikut menunjukkan efek literal dalam metadata:

// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
   literal int lit = 0;
   static const int sc = 1;
};

Perhatikan perbedaan metadata untuk sc dan lit: arahan modopt diterapkan ke sc, yang berarti dapat diabaikan oleh pengkompilasi lain.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)

Sampel berikut, yang ditulis dalam C#, mereferensikan metadata yang dibuat dalam sampel sebelumnya dan menunjukkan efek literal variabel dan 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);
   }
}

Persyaratan

Opsi pengkompilasi: /clr

Baca juga

Ekstensi Komponen untuk .NET dan UWP