zer*_*s00 7 c++ lambda thread-safety static-initialization
以下两个函数产生不同的程序集,这告诉我它们是不同的.有人可以告诉我他们的不同之处是什么?并且函数本地静态变量初始化在func2线程安全与否?如果答案取决于编译器,我想知道最常见的编译器如何使用func2.
int func1(int val)
{
const auto impl = [](int v)
{
return v * 10;
};
return impl(val);
}
int func2(int val)
{
static const auto impl = [](int v)
{
return v * 10;
};
return impl(val);
}
Run Code Online (Sandbox Code Playgroud)
"最常见的编译器"可能与此不同,因为它们对C++ 11的支持并不完全相同.
在C++ 11中,静态变量的初始化是线程安全的.在C++ 03中它不是(因为根据标准没有任何线程).