Condividi tramite


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)