2017-07-25 63 views
1

我有我的C++程序和現在我一直在使用這樣的事情在節目的開頭就初始化一個查找表:在編譯期間初始化靜態常量std :: map?

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

我只是想知道是否有反正我可以做這個初始化過程發生在編譯時而不是運行時?我知道這對我的項目有很小的影響。我只是好奇,在當前的C++ 11/14/17語義範圍內,它有可能與否。

+4

初始化將在運行時發生,無論你做什麼,但你可以使用[列表初始化(http://en.cppreference.com/w/cpp/language/list_initialization),使其更容易和更地道。 –

+1

分配動態內存是不允許'constexpr'例程的事情之一,和'的std :: map'無法避免。 –

+1

'靜態常量地圖米{{ 「一」,1},{ 「B」,2}};',但它仍然是在運行時。 – Jarod42

回答

3

不,你不能初始化std::map數據在編譯的時候!但是,如果您願意,您可以使用此「fancier」初始值設定項,那麼您可以將您的數據設置爲const std::map,以防您正在嘗試執行此操作。

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

但是,再次,這不會在編譯時初始化std::map本身。在幕後,std::map將在運行時完成這項工作。