literal (C++ 元件擴充功能)
變數 (資料成員) 標示為literal在**/clr**的編譯都會對等的原本static const變數。
所有平台
備註
(還有沒有此語言功能的註解適用於所有的執行階段)。
Windows 執行階段
備註
(還有沒有此語言功能的註解適用於 Windows 執行階段)。
需求
編譯器選項:/ZW
備註
資料成員標記為literal必須在宣告時初始化而且此數值必須是常整數、 列舉或字串型別。 從初始設定運算式的型別轉換成靜態常數資料成員的型別上並不需要使用者定義的轉換。
沒有記憶體被配置在執行階段 ; 常值的欄位 編譯器只會將它的值插入類別中繼資料中。
變數標示static const不會出現在中繼資料,以其他編譯器。
如需詳細資訊,請參閱 靜態 (C++)和 const (C++)。
literal是即時線上的關鍵字。 如需詳細資訊,請參閱 視內容而有所區別的關鍵字 (C++ 元件擴充功能)。
範例
這個範例示範, literal變數表示static。
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
下列範例顯示的影像中繼資料中的常值:
// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
literal int lit = 0;
static const int sc = 1;
};
請注意不同的中繼資料sc和lit: modopt指示詞會套用至sc,意思,它可略過其他編譯器。
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)
.field public static literal int32 lit = int32(0x0000000A)
下列範例中,在 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