2016-11-26 28 views
1

std::initializer_listのメリットは何か、またどのような目的があるのだろうと思いました。C++でのstd :: initializer_listの利点11

私は次のように遭遇しました:私は本当にそれがどのように有益見ることができないが、Why is list initialization (using curly braces) better than the alternatives?

と「非狭小化」効果と理解。

私が気付くことができるもう一つの利点は、初期化時(たとえば、いくつかのメンバーを持つクラスを初期化するとき)の使いやすさですが、それ以外にも大きな改善は見られません。実践、特に効率の観点から。

+1

あなたの質問は実際には何ですか?*なぜ、std :: initializer_listの "非絞り込み"効果が有益なのでしょうか? –

+0

確かに、おそらく私が知らないその他の利点は、大歓迎です。 – GoldenSpecOps

+1

私はそれは2つの異なる質問であると思います。最初のものはおそらく十分に特異的であろう。しかし、第2のものは奇妙で、重複して閉鎖されることがあります。結局のところ、その他の質問は、*多くの*利点が説明されたので、多くの答えを持っているので、あなたはもっと何を期待しますか? –

答えて

2

std::initializer_listは、1つの利点、つまり任意のタイプのオブジェクトを初期化する機能を提供します。狭小の

欠如はいいですが、絶対には次のように入力することができるというシンプルな利便性と比較することによってを見劣り:

std::vector<int> foo { 1, 2, 3, 4}; 

いうより:

std::vector<int> foo; 
foo.push_back(1); 
foo.push_back(2); 
foo.push_back(3); 
foo.push_back(4); 

...か多くの場合、カンマ演算子の過負荷を悪用して次のような構文を得ることに基づいて生成された多数のハックが発生します。

std::vector<int> foo; 
foo += (1, 2, 3, 4); 

ベクトルは初期化中にinitializer_listからの再割り当てを防ぐためにスペースを事前に割り当てているため、これは速度の点でいくつかの目に見える利点があります(一例)。これは明らかに良いことですが、正直に言えば、まれに取引メーカではありません。 intializer_listがより便利だったにもかかわらず、少しの割合で遅くなる可能性がある場合、人々はとにかくそれを使用します(そして、ほとんどの場合、かなり正しかったです)。

関連する問題