c++11特性のinitializer_list


以前、クラスのコンストラクション関数がメンバー変数を初期化するために初期化リストを使用することを説明するブログ「C++の初期化リストの浅い分析(割り当てと初期化を区別)」を書いた.
今、過去を除いて、普通の変数の付与について話します.つまり私たちが言及するinitializerですlist.
これもC++11の特性です.
以前はvectorに値を割り当てていました
std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);

感謝しなければならないのは、C++11があなたをもっと便利にすることです.
std::vector v = { 1, 2, 3, 4 };

これがいわゆるinitializer listです.
さらに、initializer listというキーワードがあります
C++11は,コンストラクション関数や他の関数が初期化リストをパラメータとすることを可能にする.

#include <iostream>
#include <vector>

class MyNumber
{
public:
    MyNumber(const std::initializer_list<int> &v) {
        for (auto itm : v) {
            mVec.push_back(itm);
        }
    }

    void print() {
    for (auto itm : mVec) {
        std::cout << itm << " ";
    }
    }
private:
    std::vector<int> mVec;
};

int main()
{
    MyNumber m = { 1, 2, 3, 4 };
    m.print();  // 1 2 3 4

    return 0;
}

最後にクラスを書いて、比較して、理解を深めることができます.
class CompareClass {
  CompareClass (int,int);
  CompareClass (initializer_list<int>);
};

int main()
{
    myclass foo {10,20};  // calls initializer_list ctor
    myclass bar (10,20);  // calls first constructor 
}

これで{}と()の違いがわかったでしょう!!!