【发布时间】:2017-02-07 03:05:49
【问题描述】:
在 C++11 中,函数作用域 static/thread_local 变量的初始化保证是线程安全的。它们是否也保证在函数入口时被初始化?
【问题讨论】:
标签: c++ c++11 initialization lazy-initialization thread-local
在 C++11 中,函数作用域 static/thread_local 变量的初始化保证是线程安全的。它们是否也保证在函数入口时被初始化?
【问题讨论】:
标签: c++ c++11 initialization lazy-initialization thread-local
根据 [stmt.dcl]/4(强调我的):
具有静态存储持续时间 (3.7.1) 或线程存储的所有块范围变量的零初始化 (8.5) 持续时间 (3.7.2) 在任何其他初始化发生之前执行。 持续初始化 (3.6.2) 具有静态存储持续时间的块范围实体(如果适用)在首次进入其块之前执行。 允许实现使用静态或 允许实现静态初始化的相同条件下的线程存储持续时间 在命名空间范围内具有静态或线程存储持续时间的变量 (3.6.2)。否则这样的变量是 初始化控件第一次通过其声明;这样的变量被认为是初始化的 初始化完成。
我不确定你所说的“函数入口”是什么意思,但答案都在我引用的段落中。
【讨论】: