c++ - 是否有可能实现一个可以容纳 POD 元素并在编译时初始化分配的静态存储的容器?

标签 c++

例如,像 map 这样包含 20000 个条目的对象。在运行时不调用insert方法,在编译时初始化它的元素,把这个映射写入二进制文件,就像一个全局的int数组。

最佳答案

编译时间:
不使用运行时 map::insert():

使用 C++11,您可以声明和初始化一个全局对象。

#include<map>
std::map<int, int> m = {{0,0}, {1,1}, {2,2}};
int main () {}

在某些全局对象构造函数中,您可以将此 map 写入文件。

struct Global {
  Global (const char* fileName) {
    std::ofstream file(fileName);
    for(auto pair : m)
      // insert operation
  }
}
g_Initialize("xyz.txt");

因此,在 main() 运行之前,您已准备就绪。

执行此操作时,请注意 static initialization order fiasco .

更新:std::map 只是一个方便的示例。这里的关键是使用std::initializer_list .您也可以使用自定义类。

关于c++ - 是否有可能实现一个可以容纳 POD 元素并在编译时初始化分配的静态存储的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479124/

相关文章:

c++ - 使用 MSBuild 目标文件时查看 VS C++ 项目中的有效属性?

c++ - C++中的类型转换

c++ - Visual Studio 2010 C++ 代码格式化程序

c++ - OpenGL 上的多个视口(viewport)

c++ - 高斯消去法不消去正确项

c++ - 使用带有参数包扩展和附加值的静态存储持续时间初始化 std::array

c++ - 为什么可以将函数原型(prototype)放在函数内部?

c++ - 如何修复 C++ 模板代码中的 'expected primary-expression before' 错误?

c++ - 为什么这个三角形条只画了屏幕的三分之一?

c++ - 枚举的 std::unordered_set,调用 find 给出段错误