2017-12-31 250 views
7

私はクラスAinitializer_listがあり、それをメンバ変数として格納しています。std :: initializer_listをメンバ変数として使用

class A 
{ 
public: 
    A(std::initializer_list<std::string> il) : 
     m_il(il) 
    {} 

    std::initializer_list<std::string> m_il; 
}; 

別のクラスBデフォルトはinitializer_list

class B 
{ 
public: 
    B() 
    { 
     std::cout << *m_a.m_il.begin() << std::endl; 
    } 

    A m_a { "hello", "bye" }; 
}; 

を使用して初期化されたメンバ変数としてAを持っている私がメインでこのコードを実行すると、それは何も出力しません。

int main() 
{ 
    B b; 
} 

なぜ上記のコードではhelloが印刷されませんでしたか?私の使用方法はstd::initializer_listですか?

+2

データメンバとして 'initializer_list'を使用しないでください。 – 0x499602D2

+0

非静的なクラスメンバを初期化することは、[ここ](http://en.cppreference.com/w/cpp/utility/initializer_list)でも、基本となる一時的なライフの寿命を特に延ばすものではありません – Useless

答えて

6

std::initializer_listをコピーすると、その基礎となるオブジェクトはコピーされません。これはコンテナとして使用するためのものではありません。あなたが代わりにやるべきことはstd::vectorのように、何か他のものに格納されています

class A 
{ 
public: 
    A(std::initializer_list<std::string> il) : 
     m_il(il) 
    {} 

    std::vector<std::string> m_il; 
};