xml*_*lmx 5 c++ standards multithreading c++11
int main()
{
thread_local int n;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在C ++ 11中合法。
根据cppreference:
thread_local仅在名称空间范围内声明的对象,在块范围内声明的对象和静态数据成员才允许使用关键字。
我只是好奇:
局部变量始终位于当前线程的堆栈上,因此它始终是线程局部的。在这种情况下thread_local int n;完全相同int n;。
为什么C ++ 11允许将局部变量声明为thread_local,而不是显式禁用它以避免滥用?
根据该标准,thread_local在块范围内的变量也是隐式的static。但是,并非所有static变量都是thread_local。
所以
int main()
{
thread_local int x;
}
Run Code Online (Sandbox Code Playgroud)
实际上等于
int main()
{
thread_local static int x;
}
Run Code Online (Sandbox Code Playgroud)
但不同于
int main()
{
int x; // auto implied
}
Run Code Online (Sandbox Code Playgroud)