这个全局函数可能会遭受静态初始化失败吗?
template <typename TFn>
void ParallelFor(int iIni,int iFin,TFn Fn)
{
static const unsigned int NThread= std::thread::hardware_concurrency();
// ...
}
这个全局函数可能会遭受静态初始化失败吗?
template <typename TFn>
void ParallelFor(int iIni,int iFin,TFn Fn)
{
static const unsigned int NThread= std::thread::hardware_concurrency();
// ...
}
这个全局函数可能会遭受静态初始化失败吗?
不,它不会。你很安全... :-)
引用 C++ 标准草案(强调我的)...
$6.7:4: 在控制第一次通过其声明时执行具有静态存储持续时间([basic.stc.static])或线程存储持续时间([basic.stc.thread])的块范围变量的动态初始化;这样的变量在其初始化完成时被认为已初始化。如果初始化抛出异常退出,说明初始化未完成,下次控件进入声明时会再次尝试。如果在变量初始化时控制同时进入声明,则并发执行将等待初始化完成
另请参阅:静态局部变量
由于您的函数是一个函数模板template <typename TFn>
,因此对于每个单独的实例化(替换TFn
),static const unsigned int NThread = std::thread::hardware_concurrency();
都将被评估