リテラル (C++ コンポーネント拡張)
(データ メンバー) を変数としてマークliteralで、 /clrコンパイルされて、ネイティブと同等のstatic const変数。
すべてのプラットフォーム
解説
(がないすべてのランタイムに適用されるこの言語の機能を解説します。)
Windows ランタイム
解説
(がない、Windows 実行時にのみ適用される解説この言語機能します。)
要件
コンパイラ オプション:/ZW
解説
データ メンバーのマークliteral宣言時に初期化する必要がありますと、値は、定数の整数型、列挙型、または文字列型でなければなりません。Static const のデータ メンバーの型を初期化式の型からの変換では、ユーザー定義の変換する必要はありません。
リテラル フィールドは、実行時のメモリは割り当てられません。 コンパイラは、クラスのメタデータにのみ値を挿入します。
変数をマークstatic constのメタデータには、他のコンパイラでは使用できません。
詳細については、「静的 (C++)」および「定数 (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