【问题标题】:Initialize static const std::map during compile time?在编译期间初始化静态常量 std::map?
【发布时间】: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&lt;string, int&gt; m{{"a", 1}, {"b", 2}}; 但它仍在运行时。
  • 你可以使用std::array&lt;std::pair&lt;string, int&gt;, xx&gt;,你不能使用constexpr的地图。
  • 你可以考虑boost::hana maps。

标签: c++ c++11 stl


【解决方案1】:

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

但是,如果您愿意,您可以使用这个“更高级”的初始化程序,然后您可以将您的数据保存在 const std::map 中,以防您正在尝试这样做。

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

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

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多