Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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