La vinculación de miembros integrales const estáticos ya no es literal

Actualización: noviembre 2007

La declaración de un miembro constante de una clase ha cambiado de Extensiones administradas para C++ a Visual C++ 2008.

Aunque todavía se admiten los miembros enteros static const, su atributo de vinculación ha cambiado. Su atributo de vinculación anterior ahora lo lleva un miembro entero literal. Por ejemplo, considere la siguiente clase de Extensiones administradas:

public __gc class Constants {
public:
   static const int LOG_DEBUG = 4;
};

Esto genera los siguientes atributos CIL subyacentes para el campo (tenga en cuenta el atributo literal):

.field public static literal int32 
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

Mientras que esto aún se compila en la nueva sintaxis:

public ref class Constants {
public:
   static const int LOG_DEBUG = 4;
};

ya no emite el atributo literal y, por consiguiente, el tiempo de ejecución del CLR no lo ve como una constante:

.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)

Para tener el mismo atributo literal entre lenguajes, la declaración se debería cambiar al miembro de datos literal recientemente compatible, como sigue:

public ref class Constants {
public:
   literal int LOG_DEBUG = 4;
};

Vea también

Conceptos

Declaraciones de miembros en una clase o interfaz

Referencia

literal (Visual C++)