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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk