Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Declaration of a constant member of a class has changed from Managed Extensions for C++ to Visual C++.
Although static const integral members are still supported, their linkage attribute has changed. Their former linkage attribute is now carried in a literal integral member. For example, consider the following Managed Extensions class:
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
This generates the following underlying CIL attributes for the field (note the literal attribute):
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
While this still compiles under the new syntax:
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
it no longer emits the literal attribute, and therefore is not viewed as a constant by the CLR runtime:
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
In order to have the same inter-language literal attribute, the declaration should be changed to the newly supported literal data member, as follows,
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};