std::initializer_list
एक कोर-भाषा अंतर्निहित क्यों नहीं है?
यह मुझे लगता है कि यह C ++ 11 की एक महत्वपूर्ण विशेषता है और अभी तक इसका अपना आरक्षित कीवर्ड (या कुछ समान) नहीं है।
इसके बजाय, initializer_list
यह मानक लाइब्रेरी से सिर्फ एक टेम्प्लेट क्लास है जिसमें कंपाइलर द्वारा संभाला गया नया ब्रेड-इन-इन-लिस्ट सिंटैक्स से एक विशेष, अंतर्निहित मैपिंग है । {...}
पहले सोचा, यह समाधान काफी हैक है ।
क्या इस तरह C ++ भाषा में नए जोड़ अब लागू किए जाएंगे: कुछ टेम्प्लेट कक्षाओं की अंतर्निहित भूमिकाओं द्वारा और कोर भाषा द्वारा नहीं ?
कृपया इन उदाहरणों पर विचार करें:
widget<int> w = {1,2,3}; //this is how we want to use a class
नया वर्ग क्यों चुना गया:
widget( std::initializer_list<T> init )
इन विचारों में से किसी एक के समान उपयोग करने के बजाय :
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- एक क्लासिक सरणी, आप शायद
const
यहाँ और वहाँ जोड़ सकते हैं - तीन डॉट्स पहले से ही भाषा में मौजूद हैं (var-args, अब varadic टेम्प्लेट), सिंटैक्स का फिर से उपयोग क्यों नहीं करें (और इसे अंतर्निहित महसूस करें )
- बस एक मौजूदा कंटेनर, जोड़ सकता है
const
और&
वे सभी पहले से ही भाषा का एक हिस्सा हैं। मैंने केवल अपने 3 पहले विचारों को लिखा है, मुझे यकीन है कि कई अन्य दृष्टिकोण हैं।
std::array<T>
से अधिक 'भाषा का हिस्सा' नहीं है std::initializer_list<T>
। और ये लगभग केवल पुस्तकालय घटक नहीं हैं जो भाषा पर निर्भर करते हैं। देखें , new
/ delete
, type_info
विभिन्न अपवाद प्रकार size_t
, आदि
const T(*)[N]
, क्योंकि यह बहुत ही समान व्यवहार करता है कि कैसे std::initializer_list
काम करता है।