【发布时间】:2017-12-31 12:12:56
【问题描述】:
我的 C++ 程序中有一个查找表,现在我必须在程序开始时使用类似这样的方法对其进行初始化:
static const map<string, int> m;
m["a"] = 1;
m["b"] = 2;
...
我只是想知道是否有办法让这个初始化过程发生在编译时而不是运行时?我知道这对我的程序的性能影响很小。我只是好奇,在当前 C++11/14/17 语义的范围内,这是否可能。
【问题讨论】:
-
无论您做什么,初始化都会在运行时发生,但您可以使用list initialization 使其更简单、更符合习惯。
-
动态内存分配是
constexpr例程中不允许的事情之一,std::map无法避免。 -
static const map<string, int> m{{"a", 1}, {"b", 2}};但它仍在运行时。 -
你可以使用
std::array<std::pair<string, int>, xx>,你不能使用constexpr的地图。 -
你可以考虑
boost::hanamaps。