literal
(C++/CLI)
Derlemede olarak literal
işaretlenmiş bir /clr
değişken (veri üyesi), derleme zamanı sabitidir. C# const
değişkeninin yerel eşdeğeridir.
Tüm Platformlar
Açıklamalar
(Bu dil özelliği için tüm çalışma zamanları için geçerli olan hiçbir açıklama yoktur.)
Windows Çalışma Zamanı
Açıklamalar
(Bu dil özelliği için yalnızca Windows Çalışma Zamanı geçerli olan bir açıklama yoktur.)
Ortak Dil Çalışma Zamanı
Açıklamalar
olarak literal
işaretlenmiş bir veri üyesi bildirildiğinde başlatılmalıdır. Değer sabit bir tamsayı, sabit sabit veya dize türü olmalıdır. Başlatma ifadesinin türünden veri üyesinin türüne literal
dönüştürme, kullanıcı tanımlı dönüştürme gerektirmez.
Çalışma zamanında alan için literal
bellek ayrılmaz; derleyici yalnızca değerini sınıfın meta verilerine ekler. literal
Değer, derleme zamanı sabiti olarak değerlendirilir. Standart C++ içindeki en yakın eşdeğerdir constexpr
, ancak bir veri üyesi C++/CLI'da olamaz constexpr
.
olarak literal
işaretlenmiş bir değişken, işaretli static const
bir değişkenden farklıdır. Veri static const
üyesi diğer derleyicilerin meta verilerinde kullanılamaz. Daha fazla bilgi için bkz. static
ve const
.
literal
bağlama duyarlı bir anahtar sözcüktür. Daha fazla bilgi için bkz . Bağlama duyarlı anahtar sözcükler.
Örnekler
Bu örnekte bir literal
değişkenin ifade ettiği static
gösterilir.
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
Aşağıdaki örnekte meta verilerdeki etkisi gösterilmektedir literal
:
// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
literal int lit = 0;
static const int sc = 1;
};
ve lit
için sc
meta verilerdeki farka dikkat edin: modopt
yönergesi uygulaması, sc
diğer derleyiciler tarafından yoksayılabilir anlamına gelir.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)
C# dilinde yazılan aşağıdaki örnek, önceki örnekte oluşturulan meta verileri başvurur ve ve static const
değişkenlerinin literal
etkisini gösterir:
// 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);
}
}
Gereksinimler
Derleyici seçeneği: /clr