Is C++11互斥锁只使用静态初始化

Is C++11 mutex only uses static initialization?

本文关键字:静态 初始化 C++11 Is      更新时间:2023-10-16

C++11标准是否保证互斥对象不使用动态初始化?例如,如果我们声明一个互斥类型的全局变量,然后在另一个TU中的另一个全局变量的构造函数中使用它,那么这里的构造顺序会受到关注吗?

您使用不精确的语言会让您感到困惑。术语"零初始化"在标准中具有特定的含义,该含义不适用于mutex,也不适用于您所陈述的用例。

因此,让我们通过查看您的示例来了解您真正的要求:

如果我们声明一个互斥类型的全局变量,然后在另一个CU中另一个全局变量的构造函数,将建筑业是这里的一个问题吗?

我们在这里仍然有点模糊,并且管理非成员变量初始化的规则很微妙,所以我将总结出我认为总体上合理的建议。

通常,不要依赖于非成员变量的初始化顺序

这是一个不使用全局变量的好理由,只要你能避免它。

当然是。在任何情况下,如果您在程序的启动阶段(即:在main()调用之前)谈论全局变量之间的交互,这都是一个问题。

此外,如果它可以被零初始化(与这到底意味着什么无关),那么初始化将在互斥对象本身的构造函数期间发生,因此构造顺序将是一个问题。