literal (C++/CLI)

Una variable (miembro de datos) marcada como literal en una /clr compilación es una constante en tiempo de compilación. Es el equivalente nativo de una variable de C# const.

Todas las plataformas

Comentarios

(No hay notas para esta característica de lenguaje que se apliquen a todos los runtimes).

Windows en tiempo de ejecución

Comentarios

(No hay notas para esta característica de lenguaje que solo se apliquen a Windows Runtime).

Common Language Runtime

Comentarios

Un miembro de datos marcado como literal debe inicializarse cuando se declara. Además, el valor debe ser una constante integral, enumeración o tipo de cadena. La conversión del tipo de la expresión de inicialización al tipo del miembro de datos literal no debe requerir una conversión definida por el usuario.

No se asigna memoria para el campo literalen tiempo de ejecución; el compilador solo inserta su valor en los metadatos para la clase. El literal valor se trata como una constante en tiempo de compilación. El equivalente más cercano en C++ estándar es constexpr, pero un miembro de datos no puede estar constexpr en C++/CLI.

Una variable marcada como literal difiere de una marcada como static const. Un miembro de datos static const no está disponible en metadatos para otros compiladores. Para obtener más información, vea static y const.

literal es una palabra clave contextual. Para obtener más información, consulte Palabras clave contextuales.

Ejemplos

En este ejemplo se muestra que una variable literalimplicastatic.

// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
   literal int i = 4;
};

int main() {
   int value = X::i;
}

En el ejemplo siguiente se muestra el efecto de literal en los metadatos:

// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
   literal int lit = 0;
   static const int sc = 1;
};

Tenga en cuenta la diferencia en los metadatos para sc y lit: la directiva modopt se aplica a sc, por lo que otros compiladores pueden hacerle caso omiso.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)

En el siguiente ejemplo, creado en C#, se hace referencia a los metadatos creados en el ejemplo anterior y se muestra el efecto de las variables literaly 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);
   }
}

Requisitos

Opción del compilador: /clr

Consulte también

Extensiones de componentes de .NET y UWP