Share via


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 constbir 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 staticgö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 litiçin sc meta verilerdeki farka dikkat edin: modopt yönergesi uygulaması, scdiğ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

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları