2017-12-31 152 views
7

मेरे पास एक वर्ग A है जो initializer_list लेता है और इसे एक सदस्य चर के रूप में संग्रहीत करता है।सदस्य चर के रूप में std :: startizer_list का उपयोग कर

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

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

एक अन्य वर्ग BA एक सदस्य चर रहा है कि डिफ़ॉल्ट जब मैं मुख्य में इस कोड को चलाने अब initializer_list

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

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

का उपयोग कर प्रारंभ, यह कुछ भी प्रिंट के रूप में है।

int main() 
{ 
    B b; 
} 

ऊपर दिए गए कोड को hello प्रिंट क्यों नहीं किया गया? क्या मेरा उपयोग std::initializer_list गलत है?

+2

initializer_list' एक डेटा सदस्य के रूप में 'प्रयोग न करें। – 0x499602D2

+0

गैर-स्थैतिक वर्ग के सदस्य को शुरू करने का भी उल्लेख किया गया है [यहां] (http://en.cppreference.com/w/cpp/utility/initializer_list) कुछ ऐसा जो विशेष रूप से _doesn't_ अंतर्निहित अस्थायी जीवनकाल का विस्तार नहीं करता है – 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; 
}; 
संबंधित मुद्दे