【问题标题】:Are function scope static or thread_local variables initialized in first entry in C++11?函数作用域静态变量或 thread_local 变量是否在 C++11 的第一个条目中初始化?
【发布时间】:2017-02-07 03:05:49
【问题描述】:

在 C++11 中,函数作用域 static/thread_local 变量的初始化保证是线程安全的。它们是否也保证在函数入口时被初始化?

【问题讨论】:

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


    【解决方案1】:

    根据 [stmt.dcl]/4(强调我的):

    具有静态存储持续时间 (3.7.1) 或线程存储的所有块范围变量的零初始化 (8.5) 持续时间 (3.7.2) 在任何其他初始化发生之前执行。 持续初始化 (3.6.2) 具有静态存储持续时间的块范围实体(如果适用)在首次进入其块之前执行。 允许实现使用静态或 允许实现静态初始化的相同条件下的线程存储持续时间 在命名空间范围内具有静态或线程存储持续时间的变量 (3.6.2)。否则这样的变量是 初始化控件第一次通过其声明;这样的变量被认为是初始化的 初始化完成。

    我不确定你所说的“函数入口”是什么意思,但答案都在我引用的段落中。

    【讨论】:

    • 我的意思是,如果我不调用该函数,则永远不应该调用构造函数。
    • @SiyuanRen 我认为这不能保证,因为该段落说允许早期初始化。如果这对您考虑的特定目的很重要,我建议发布一个新问题来说明您关注的案例。
    猜你喜欢
    • 2014-05-12
    • 2016-03-21
    • 2017-09-11
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多