literal
(C++/CLI)
在編譯中/clr
標示為 literal
的變數(數據成員)是編譯時間常數。 它是 C# const
變數的原生對等專案。
所有平台
備註
(這個語言功能沒有適用所有執行階段的備註。)
Windows 執行階段
備註
(這個語言功能沒有只適用於 Windows 執行階段的備註。)
通用語言執行平台
備註
宣告時,必須初始化標示為 literal
的數據成員。 而且,值必須是常數整數、列舉或字串類型。 從初始化表達式的類型轉換成數據成員的類型 literal
,不需要使用者定義的轉換。
運行時間不會為 literal
欄位配置記憶體;編譯程式只會在 類別的元數據中插入其值。 值 literal
會被視為編譯時間常數。 標準C++中最接近的對等專案是 constexpr
,但數據成員不能 constexpr
位於 C++/CLI 中。
標示為 literal
的變數與標示的 static const
變數不同。 static const
數據成員無法在元數據中提供給其他編譯程式使用。 如需詳細資訊,請參閱 static
和 const
。
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;
};
請注意 sc
和 lit
之中繼資料內的差異: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