c++ - C++17“静态内联”是否解决了静态初始化顺序惨败?
问题描述
我偶尔会遇到“C++静态初始化顺序惨败”,其中一些复杂的全局对象(如哈希表)在构造之前被另一个类使用,有时会导致在进入main()之前初始化时崩溃。
众所周知,可以通过将需要初始化的对象部分作为静态对象嵌入成员函数中来避免这种惨败,因为函数中的静态对象总是在第一次进入函数时被初始化,例如:
struct GlobalHashTable
{
std::map <std::string, int>& stringmap()
{
static std::map <std::string, int> stringmap;
return stringmap;
}
... (remainder safely uses stringmap() to get at properly-initialized map object)
};
似乎“静态内联”对象与这些嵌入在函数中的对象具有相似的语义。它们可以在避免惨败的同时安全地在课堂上使用吗?
例如,
struct GlobalHashTable
{
static inline std::map <std::string, int> stringmap;
... (remainder safely uses stringmap to get at properly-initialized map object)
};
解决方案
推荐阅读
- python - 有没有办法将此系统转换为 ODE 并在 python 中求解?
- codenameone - 横幅广告一旦显示如何删除
- java - 无法打印数组中的第一个元素(由用户输入)
- byte-buddy - 如何在 Advice 包装方法中获取私有字段并调用私有方法?
- programming-languages - 动态 Snort 规则示例
- flutter - Flutter 为 AppLocalization.of(context) 返回 null
- javascript - 用纯 JavaScript 开发干净的代码后,表单为空时无法触发警报
- html - 链接中的“rel”属性-“nofollow”与“ugc”
- php - 谷歌地图在同一标记中获取多个数据
- pytorch - Pytorch 置换不改变所需的索引