L'attributo di collegamento dei membri integrali di Static Const non è più Literal
La dichiarazione di un membro costante di una classe è stata modificata in Visual C++ rispetto alle estensioni gestite di C++.
Sebbene i membri integrali static const siano ancora supportati, il relativo attributo di collegamento è stato modificato. L'attributo di collegamento precedente è stato incluso in un membro integrale di tipo literal. Si consideri ad esempio la seguente classe di estensioni gestite:
public __gc class Constants {
public:
static const int LOG_DEBUG = 4;
};
Tramite questo codice vengono generati i seguenti attributi sottostanti CIL per il campo (si noti l'attributo literal):
.field public static literal int32
modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Quando il codice viene compilato con la nuova sintassi:
public ref class Constants {
public:
static const int LOG_DEBUG = 4;
};
l'attributo literal non viene più generato, pertanto non viene visualizzato come costante dal runtime CLR:
.field public static int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsConstModifier) STANDARD_CLIENT_PRX = int32(0x00000004)
Per ottenere lo stesso attributo literal nei diversi linguaggi, la dichiarazione deve essere modificata nel nuovo membro dati literal supportato, come segue:
public ref class Constants {
public:
literal int LOG_DEBUG = 4;
};
Vedere anche
Riferimenti
valore letterale (Estensioni del componente C++)
Concetti
Dichiarazioni di membri in una classe o interfaccia (C++/CLI)