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

时间:2017-07-25 13:56:03

标签: c++ c++11 stl

我的C ++程序中有一个查找表,现在我必须在程序开头使用以下内容对其进行初始化:

static const map<string, int> m;
m["a"] = 1;
m["b"] = 2;
...

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

1 个答案:

答案 0 :(得分:3)

不,您无法在编译时使用数据初始化std::map

但是,如果您愿意,可以使用此“发烧友”初始化程序,然后您可以将数据放在const std::map中,以防这是您要执行的操作。

static const map<string, int> m = {
    { "a", 1 },
    { "b", 2 }
};

但是AGAIN,这不会在编译时初始化std::map本身。在幕后,std::map将在运行时完成工作。