线程局部变量的初始化顺序

时间:2018-08-12 10:29:07

标签: c++ c++11 initialization thread-local thread-local-storage

N4713的报价:

  

使用静态方法动态初始化非局部变量V和W   储存期限如下:
  如果V和W已下订单   在一次翻译中,初始化和V在W之前定义   单位,V的初始化在初始化之前排序   W。

线程存储持续时间的变量是否有类似的段落?在下面的代码中,V的初始化是在初始化之前排序的 的W中?

thread_local int V = 1;
thread_local int W = V;

已更新:

我要修改代码如下:

thread_local string V;
thread_local string W;

1 个答案:

答案 0 :(得分:1)

6.7.2开始,线程存储持续时间[basic.stc.thread]

  

具有线程存储持续时间的变量应在其第一次使用odr(6.2)之前初始化,如果已构造,   应该在线程退出时销毁。

这意味着V在'W'之前初始化。