在编译时初始化静态常量std::map? 我在C++程序中有一个查找表,现在我必须用这样的程序在程序的开始处初始化它: static const map<string, int> m; m["a"] = 1; m["b"] = 2; ... 静态常量映射m; m[“a”]=1; m[“b”]=2; ...

在编译时初始化静态常量std::map? 我在C++程序中有一个查找表,现在我必须用这样的程序在程序的开始处初始化它: static const map<string, int> m; m["a"] = 1; m["b"] = 2; ... 静态常量映射m; m[“a”]=1; m[“b”]=2; ...,c++,c++11,stl,C++,C++11,Stl,我只是想知道是否有任何方法可以让这个初始化过程在编译时而不是运行时进行?我知道这对我的程序的性能影响很小。我只是好奇,在当前的C++11/14/17语义范围内,这是可能的还是不可能的。不,你不能在编译时用数据初始化std::map 但是,如果您愿意,您可以使用这个“fancier”初始值设定项,然后您可以将数据保存在const std::map中,以防您尝试这样做 static const map<string, int> m = { { "a", 1 }, { "b

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

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

但是,如果您愿意,您可以使用这个“fancier”初始值设定项,然后您可以将数据保存在
const std::map
中,以防您尝试这样做

static const map<string, int> m = {
    { "a", 1 },
    { "b", 2 }
};
静态常量映射m={
{“a”,1},
{“b”,2}
};

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

初始化将在运行时进行,无论您做什么,但您可以使用,使其更简单、更惯用。
constepr
例程中不允许分配动态内存,而且
std::map
无法避免但是它仍然在运行时。您可以使用<代码> STD::数组< /代码>,您不能使用映射为<代码> COSTEXPRO< <代码>。您可以考虑<代码> Boo::HANA < /代码>映射。