2016-06-06 9 views
15

रूप https://stackoverflow.com/a/26614984/481267 से देखा जा सकता निम्न हेडर #include <initializer_list> करने के लिए मानक द्वारा गारंटी दी जाती है:इन सी ++ शीर्षकों को <itializer_list> शामिल करने के लिए क्यों निर्दिष्ट किया गया है?

  • [कंटेनर]
  • <utility>
  • <string>
  • <algorithm>
  • <random>
  • <valarray> में सब कुछ
  • <regex>

इन हेडर के अधिकांश कम से कम एक समारोह है कि एक std::initializer_list<E> तर्क लेता घोषित, तो यह समझ में आता है। हालांकि,

  • <array>, <stack>, और <queue> हालांकि शायद यह समझ में आता है समान रूप से यहाँ सभी कंटेनर के इलाज के लिए, ऐसी कोई कार्य हैं।
  • <utility> में ऐसा कोई फ़ंक्शन नहीं है।
  • <iterator> करता है एक initializer_list तर्क (rbegin, rend) के साथ कार्य होते हैं, लेकिन यह <initializer_list> शामिल करने के लिए निर्दिष्ट नहीं है।

इन अपवादों के पीछे तर्क क्या है?

+0

मुझे लगता है कि वर्दी प्रारंभिकरण का उपयोग करने के लिए '' को शामिल करने की आवश्यकता है। इस प्रश्न की टिप्पणियां देखें [यहां] (http://stackoverflow.com/q/33704978/3093378)। – vsoftco

+1

' 'में शामिल करने से एन 2672 तक सभी तरह की तिथियां मिलती हैं। बाकी एन 2 9 30 द्वारा किए जाते हैं। मुफ्त 'rbegin'/'rend' देर से जोड़ रहे हैं। –

+0

@ vsoftco केवल तभी यदि आप स्पष्ट रूप से या स्पष्ट रूप से इस प्रकार का उपयोग करते हैं। –

उत्तर

1

ऐसा लगता है कि कोई स्पष्ट तर्क नहीं है, सिर्फ मानक के लिए कुछ प्रस्ताव किए गए थे और उन प्रस्तावों को स्वीकार कर लिया गया था।

दस्तावेज़ के बहुत अंत में N2672 Initializer List proposed wording यह सिर्फ कहते हैं:

20,2 में उपयोगिता घटक [उपयोगिता] अनुच्छेद 1:

इस उपखंड कुछ बुनियादी समारोह और वर्ग टेम्पलेट्स कि भर में उपयोग किया जाता है बाकी पुस्तकालय।

हैडर <utility> सार

 #include<initializer_list> 
     namespace std { 

तो, कागज के लेखकों initializer_list एक उपयोगिता के रूप में देखा था, और इसलिए यह <utility> हैडर के साथ शामिल किया जाना चाहिए। और इसलिए यह है।

पेपर <iterator> शीर्षलेख में कोई भी परिवर्तन प्रस्तावित नहीं करता था, इसलिए कोई भी नहीं बनाया गया था।

संबंधित मुद्दे

 संबंधित मुद्दे