literal (C++/CLI)

在編譯中 /clr 標示為 literal 的變數(資料成員)是編譯時間常數。 它是 C# const 變數的原生對等專案。

所有平台

備註

(這個語言功能沒有適用所有執行階段的備註。)

Windows 執行階段

備註

(這個語言功能沒有只適用於 Windows 執行階段的備註。)

Common Language Runtime

備註

宣告時,必須初始化標示為 literal 的資料成員。 而且,值必須是常數整數、列舉或字串類型。 從初始化運算式的類型轉換成資料成員的類型 literal ,不需要使用者定義的轉換。

執行時間不會為 literal 欄位配置記憶體;編譯器只會在 類別的中繼資料中插入其值。 值 literal 會被視為編譯時間常數。 標準 C++ 中最接近的對等專案是 constexpr ,但資料成員不能 constexpr 在 C++/CLI 中。

標示為 literal 的變數與標示的 static const 變數不同。 static const資料成員無法在中繼資料中提供給其他編譯器使用。 如需詳細資訊,請參閱 staticconst

literal 是即時線上關鍵字。 如需詳細資訊,請參閱 上下文相關關鍵字

範例

此範例顯示 literal 變數表示 static

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

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

下列範例顯示中繼資料中 的效果 literal

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

請注意 sclit 之中繼資料內的差異:modopt 指示詞會套用至 sc,這表示其他編譯器可以忽略它。

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

下列以 C# 撰寫的範例會參考在上一個範例中建立的 literal 中繼資料,並顯示 和 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);
   }
}

需求

編譯器選項:/clr

另請參閱

適用於.NET 和 UWP 的元件延伸模組