मूल तर्क बारे में अटकलें ज्यादातर इस तरह के एक मामले में व्यर्थ है, लेकिन इस डिजाइन के साथ copy_n
जैसे की नकारात्मक गिनती के साथ लागू किया जा सकता है int
या ptrdiff_t
प्रकार, इस मामले में यह केवल कुछ भी नहीं करता है, और यह निश्चित रूप से मानकीकरण समिति के सदस्यों को स्पष्ट कर दिया जाना चाहिए, जो बहुत सक्षम लोग हैं।
एक अतिरिक्त लाभ यह है कि इस तरह के इनपुट और आउटपुट iterators के रूप में विशेष iterators, साथ, आकार किसी भी संभावित सूचक अंतर से भी बड़ा हो सकता है, और इसलिए संभवतः से बड़ा size_t
का प्रतिनिधित्व कर सकते हैं। जैसे यह 32-बिट विंडोज़ में 4 जीबी से बड़ी फ़ाइलों के लिए है। copy_n
की परिभाषा स्पष्ट सूचक/इटरेटर अंकगणितीय, “ प्रत्येक गैर-ऋणात्मक पूर्णांक i < n
के लिए व्यक्त की जाती है, *(result + i) = *(first + i)
” निष्पादित करती है, जो वास्तव में बहुत ही विशेष मामलों में इस लाभ को प्रस्तुत करने लगती है, लेकिन नोटेशन शुद्ध इनपुट और आउटपुट इटरेटर्स को समायोजित करता है के रूप में
सी ++ 11 §25.1/12 में विस्तार से बताया:
” एल्गोरिदम ऑपरेटरों +
और -
के विवरण में इटरेटर श्रेणियों में से कुछ के लिए उपयोग किया जाता है जो के लिए वे की जरूरत नहीं है परिभाषित। इन मामलों में a+n
के शब्दों
X tmp = a;
advance(tmp, n);
return tmp;
और b-a
की कि return distance(a, b)
के रूप में ही है की तरह ही है,
डिजाइन के genericity कोई निहित लाभ, बल्कि यह अपने आप में एक नुकसान यह है कि इसे और अधिक वर्बोज़ है और कम आसानी से उत्पन्न समझा गलत उपयोग कोड के लिए निदान में है है। इसके फायदे में ऊपर सूचीबद्ध दो शामिल हैं। स्पष्ट रूप से समिति ने महसूस किया कि इन फायदों, और शायद अन्य (?) ने टेम्पलेट पैरामीटर के रूप में Size
रखने के अंतर्निहित नुकसान से अधिक है।
स्रोत
2015-12-30 02:53:27
मान लें कि डेवलपर अचानक पैरामीटर गिनती के साथ उस फ़ंक्शन को कॉल करता है, एक 'हस्ताक्षरित int' है और इसका नकारात्मक मान है, यदि 'count'' std :: size_t' है, तो यह अभिन्न प्रचार करेगा, फिर हमें एक प्राप्त होगा अपरिभाषित व्यवहार। – Danh
एक स्पष्ट मामला तब होता है जब आकार आकार 'size_t' –