Is C++11互斥锁只使用静态初始化
Is C++11 mutex only uses static initialization?
C++11标准是否保证互斥对象不使用动态初始化?例如,如果我们声明一个互斥类型的全局变量,然后在另一个TU中的另一个全局变量的构造函数中使用它,那么这里的构造顺序会受到关注吗?
您使用不精确的语言会让您感到困惑。术语"零初始化"在标准中具有特定的含义,该含义不适用于mutex
,也不适用于您所陈述的用例。
因此,让我们通过查看您的示例来了解您真正的要求:
如果我们声明一个互斥类型的全局变量,然后在另一个CU中另一个全局变量的构造函数,将建筑业是这里的一个问题吗?
我们在这里仍然有点模糊,并且管理非成员变量初始化的规则很微妙,所以我将总结出我认为总体上合理的建议。
通常,不要依赖于非成员变量的初始化顺序
这是一个不使用全局变量的好理由,只要你能避免它。
当然是。在任何情况下,如果您在程序的启动阶段(即:在main
()调用之前)谈论全局变量之间的交互,这都是一个问题。
此外,如果它可以被零初始化(与这到底意味着什么无关),那么初始化将在互斥对象本身的构造函数期间发生,因此构造顺序将是一个问题。
相关文章:
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 静态初始化的反义词是什么?
- 在静态初始化期间运行代码
- 结构数组的嵌入式C++静态初始化
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 constexpr 和 std::array 进行静态初始化来替换动态初始化的 std::vector 的闰年
- MSVC 2017 在单个翻译单元中违反静态初始化顺序
- VC++6 线程安全静态初始化
- 具有必要副作用的静态初始化被优化掉了
- 未使用全球的静态初始化器
- w/ w/结构带char缓冲液的静态初始化[]
- 静态初始化的对象不能放在块中尝试
- 功能指针的静态初始化
- lambda(或函数)C++中的静态初始化
- C++静态初始化顺序:添加到映射中
- 复杂类型数组的静态初始化
- C++ - 在派生类中静态初始化受基类保护的成员变量
- 静态初始化插件工厂
- 静态初始化包含功能指针的对象的constexpr std ::数组
- 找出静态初始化是否结束