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
資料成員無法在中繼資料中提供給其他編譯器使用。 如需詳細資訊,請參閱 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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應