2017-12-31 124 views
7

Ich habe eine Klasse A, die eine initializer_list nimmt und speichert es als Member-Variable.mit std :: initializer_list als Member-Variable

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

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

Eine andere Klasse B hat A als Mitglied Variable, die standardmäßig die initializer_list

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

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

Jetzt mit initialisiert ist, wenn ich diesen Code in Haupt laufen, ist es nichts druckt.

int main() 
{ 
    B b; 
} 

Warum hat der obige Code hello nicht gedruckt? Ist meine Verwendung von std::initializer_list falsch?

+2

nicht 'initializer_list' als Daten Mitglied anwenden. – 0x499602D2

+0

Das Initialisieren eines nicht statischen Klassenmembers wird sogar [hier] (http://en.cppreference.com/w/cpp/utility/initializer_list) als etwas erwähnt, das speziell die Lebensdauer des zugrunde liegenden Temporären nicht verlängert – Useless

Antwort

6

Beim Kopieren eines std::initializer_list werden die zugrunde liegenden Objekte nicht kopiert. Es ist nicht als Container gedacht. Was man stattdessen tun soll, ist es in etwas anderes zu speichern, wie ein std::vector:

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

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