编译器错误 C2482
“identifier”:托管/WinRT 代码中不允许线程数据的动态初始化
备注
在托管代码或 WinRT 代码中,使用 __declspec (thread) 存储类修饰符特性或 thread_local 存储类说明符声明的变量不能使用需要在运行时计算的表达式进行初始化。 在这些运行时环境中初始化 __declspec(thread)
或 thread_local
数据需要静态表达式。
示例
以下示例在托管 (/clr) 和 WinRT (/ZW) 代码中生成 C2482:
// 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++
若要解决此问题,请使用常数、constexpr
或静态表达式来初始化线程本地存储。 单独执行任何特定于线程的初始化。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈