Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'Identifier': dynamische Initialisierung von Threaddaten, die in verwaltetem/WinRT-Code nicht zulässig sind
Hinweise
Im verwalteten oder WinRT-Code können Variablen, die mithilfe des __declspec(Thread)-Speicherklassenmodifizierer-Attributs oder der thread_local Speicherklassenbezeichner deklariert werden, nicht mit einem Ausdruck initialisiert werden, der zur Laufzeit eine Auswertung erfordert. Für die Initialisierung __declspec(thread) oder thread_local Daten in diesen Laufzeitumgebungen ist ein statischer Ausdruck erforderlich.
Beispiel
Im folgenden Beispiel wird C2482 in verwaltetem (/clr) und im WinRT-Code (/ZW) generiert:
// 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++
Um dieses Problem zu beheben, initialisieren Sie threadlokalen Speicher mithilfe einer Konstanten, constexpreines statischen Ausdrucks oder eines statischen Ausdrucks. Führen Sie eine threadspezifische Initialisierung separat aus.