2017-07-25 15 views
1

私持っている私はこのような何か使用してプログラムの先頭で、それを初期化する必要があり、私のC++プログラムで、今のためのルックアップテーブル:とにかく、私はこれを行うことができますがあれば、私はちょうど疑問に思ってコンパイル時に静的const 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'ルーチンでは許されないものの1つで、' std :: map'はそれを避けることができません。 –

+1

'静的constマップ m {{" a "、1}、{" b "、2}};'しかし、実行時にはまだあります。 – Jarod42

答えて

3

いいえ、std::mapをコンパイル時に初期化することはできません。

ただし、あなたが好きな場合は、この「ファンシー」イニシャライザを使用できます。その場合は、const std::mapにデータを持たせることができます。

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

しかし、再び、これはコンパイル時にstd::map自体は初期化されません。背後では、std::mapは実行時にジョブを実行します。

関連する問題