在编译时初始化静态 const std::map?

dor*_*mon 5 c++ stl c++11

我在我的 C++ 程序中有一个查找表,现在我必须在程序开始时使用这样的东西初始化它:

static const map<string, int> m;
m["a"] = 1;
m["b"] = 2;
...
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有办法让这个初始化过程发生在编译时而不是运行时?我知道这对我的程序的性能影响很小。我只是好奇,在当前的 C++11/14/17 语义范围内,是否可能。

Wag*_*ota 5

不,你不能std::map在编译时用数据初始化!

但是,如果您愿意,您可以使用这个“更高级”的初始值设定项,然后您可以将数据保存在 a 中const std::map,以防这是您要执行的操作。

static const map<string, int> m = {
    { "a", 1 },
    { "b", 2 }
};
Run Code Online (Sandbox Code Playgroud)

但同样,这不会std::map在编译时初始化自身。在幕后,std::map将在运行时完成这项工作。