다음을 통해 공유


literal (C++/CLI)

컴파일에 /clr 표시된 literal 변수(데이터 멤버)는 컴파일 시간 상수입니다. C# const 변수에 해당하는 네이티브 변수입니다.

모든 플랫폼

설명

(이 언어 기능에는 모든 런타임에 적용되는 설명이 없습니다.)

Windows Runtime

설명

(이 언어 기능에는 Windows 런타임에만 적용되는 설명이 없습니다.)

공용 언어 런타임

설명

literal 표시된 데이터 멤버는 선언될 때 초기화해야 합니다. 또한 값은 상수 정수, 열거형 또는 문자열 형식이어야 합니다. 초기화 식의 형식에서 데이터 멤버의 literal 형식으로 변환할 때는 사용자 정의 변환이 필요하지 않습니다.

런타임에 필드에 대한 literal 메모리가 할당되지 않습니다. 컴파일러는 클래스의 메타데이터에만 해당 값을 삽입합니다. 이 값은 literal 컴파일 시간 상수로 처리됩니다. 표준 C++에서 가장 가까운 값은 constexprC++/CLI에 있을 constexpr 수 없는 데이터 멤버입니다.

표시된 literal 변수가 표시된 static const변수와 다릅니다. static const 데이터 멤버는 메타데이터에서 다른 컴파일러에 사용할 수 없습니다. 자세한 내용은 staticconst를 참조하세요.

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;
};

sclit에 대한 메타데이터에서의 차이점을 확인할 수 있습니다. 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

참고 항목

.NET 및 UWP용 구성 요소 확장