Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"identifier" : dynamiczne inicjowanie danych "thread" niedozwolone w kodzie zarządzanym/WinRT
Uwagi
W kodzie zarządzanym lub WinRT zmienne zadeklarowane przy użyciu atrybutu modyfikatora klasy magazynu __declspec(wątku) lub specyfikatora klasy magazynu thread_local nie można zainicjować za pomocą wyrażenia, które wymaga oceny w czasie wykonywania. Wyrażenie statyczne jest wymagane do inicjowania __declspec(thread) lub thread_local danych w tych środowiskach środowiska uruchomieniowego.
Przykład
Poniższy przykład powoduje wygenerowanie błędu C2482 w kodzie zarządzanym (/clr) oraz w kodzie 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++
Aby rozwiązać ten problem, zainicjuj magazyn lokalny wątków przy użyciu wyrażenia stałego, constexprlub statycznego. Należy oddzielnie wykonać inicjację specyficzną dla wątku.