Share via


literal (Extensiones de componentes de C++)

Una variable (miembro de datos) marcados como literal en un /clr compilación es el equivalente nativo de un static const variable.

Todas las plataformas

Comentarios

(No hay ningún comentarios para esta característica del lenguaje que se aplican a todos los tiempos de ejecución.)

Windows en tiempo de ejecución

Comentarios

(No hay ningún comentarios para esta característica del lenguaje que se aplican a sólo el tiempo de ejecución de Windows).

5yzft952.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador:/ZW

Comentarios

Un miembro de datos marcados como literaldebe inicializarse cuando se declara y el valor debe ser una constante integral, enumeración o tipo de cadena.Conversión de tipo de la expresión de inicialización para el tipo de los miembros de datos const estáticos no debe requerir una conversión definida por el usuario.

No se asigna memoria para el campo literal en tiempo de ejecución; sólo el compilador inserta su valor en los metadatos de la clase.

Una variable marcada static const no estará disponible en los metadatos para otros compiladores.

Para obtener más información, vea Static (C++) y const (C++).

literales una palabra clave contextual.Para obtener más información, consulte Palabras clave contextuales (Extensiones de componentes de C++).

Ejemplo

En este ejemplo se muestra que un literal variable implica static.

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

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

En el ejemplo siguiente muestra el efecto de literales en los metadatos:

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

Observe la diferencia en los metadatos de sc y lit: el modopt la directiva se aplica a sc, lo que significa que se puede pasar por alto otros compiladores.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)

.field public static literal int32 lit = int32(0x0000000A)

En el ejemplo siguiente, escrito en C#, hace referencia a los metadatos creados en el ejemplo anterior y muestra el efecto de literal y static const las variables:

// 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

Vea también

Conceptos

Extensiones de componentes para plataformas de tiempo de ejecución