literal
(C++/CLI)
컴파일에 /clr
표시된 literal
변수(데이터 멤버)는 컴파일 시간 상수입니다. C# const
변수에 해당하는 네이티브 변수입니다.
모든 플랫폼
설명
(이 언어 기능에는 모든 런타임에 적용되는 설명이 없습니다.)
Windows Runtime
설명
(이 언어 기능에는 Windows 런타임에만 적용되는 설명이 없습니다.)
공용 언어 런타임
설명
로 literal
표시된 데이터 멤버는 선언될 때 초기화해야 합니다. 또한 값은 상수 정수, 열거형 또는 문자열 형식이어야 합니다. 초기화 식의 형식에서 데이터 멤버의 literal
형식으로 변환할 때는 사용자 정의 변환이 필요하지 않습니다.
런타임에 필드에 대한 literal
메모리가 할당되지 않습니다. 컴파일러는 클래스의 메타데이터에만 해당 값을 삽입합니다. 이 값은 literal
컴파일 시간 상수로 처리됩니다. 표준 C++에서 가장 가까운 값은 constexpr
C++/CLI에 있을 constexpr
수 없는 데이터 멤버입니다.
표시된 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