Errore del compilatore C2482
'identifier': inizializzazione dinamica dei dati 'thread' non consentiti nel codice gestito/WinRT
Osservazioni:
Nel codice gestito o WinRT, le variabili dichiarate tramite l'attributo modificatore della classe di archiviazione __declspec(thread) o l'identificatore di classe di archiviazione thread_local non possono essere inizializzate con un'espressione che richiede la valutazione in fase di esecuzione. Per inizializzare __declspec(thread)
o thread_local
dati in questi ambienti di runtime è necessaria un'espressione statica.
Esempio
L'esempio seguente genera l'errore C2482 nel codice gestito (/clr) e nel codice WinRT (/ZW):
// C2482.cpp
// For managed example, compile with: cl /EHsc /c /clr C2482.cpp
// For WinRT example, compile with: cl /EHsc /c /ZW C2482.cpp
#define Thread __declspec( thread )
Thread int tls_i1 = tls_i1; // C2482
int j = j; // OK in C++; C error
Thread int tls_i2 = sizeof( tls_i2 ); // Okay in C and C++
Per risolvere questo problema, inizializzare l'archiviazione locale del thread usando un'espressione statica, constexpr
o costante. Eseguire separatamente qualsiasi inizializzazione specifica del thread.