कंटेनर आवश्यकताओं को C ++ 03 से C ++ 11 में बदल दिया है। जबकि C ++ 03 में कंबल की आवश्यकताएं थीं (जैसे कि वेक्टर के लिए प्रतिलिपि निर्माण और असाइनमेंट की प्रतिलिपि), C ++ 11 प्रत्येक कंटेनर ऑपरेशन (धारा 23.2) पर ठीक-ठीक आवश्यकताओं को परिभाषित करता है।
नतीजतन, आप एक प्रकार को स्टोर कर सकते हैं जो कॉपी-कंस्ट्रक्टेबल है, लेकिन असाइन करने योग्य नहीं है - जैसे कि एक कॉन्स्टेबल सदस्य के साथ एक संरचना - जब तक आप केवल कुछ ऑपरेशन करते हैं, जिसमें असाइनमेंट (निर्माण) की आवश्यकता नहीं होती है और push_back
ऐसे ऑपरेशन होते हैं ; insert
) नहीं है।
मैं जो सोच रहा हूं वह है: क्या इसका मतलब यह है कि मानक अब अनुमति देता है vector<const T>
? मुझे ऐसा कोई कारण नहीं दिख रहा है - यह नहीं होना चाहिए const T
, जैसे कि एक कांस्टेबल सदस्य के साथ एक संरचना, एक प्रकार है जो रचनात्मक रूप से कॉपी है लेकिन असाइन करने योग्य नहीं है - लेकिन मुझे कुछ याद हो सकता है।
(क्या मुझे लगता है कि मुझे कुछ याद किया गया हो सकता है का हिस्सा है, यह है कि अगर आप तात्कालिकता करने की कोशिश करते हैं vector<const T>
, तो जीसी ट्रंक दुर्घटनाग्रस्त हो जाता है और जलता है , लेकिन यह ठीक है vector<T>
जहां टी का एक सदस्य है)।
address
डिफ़ॉल्ट आवंटनकर्ता में अतिभारित सदस्य कार्यों की जोड़ी है : जब टी कास्ट होता है, तो इन दो अधिभार में एक ही हस्ताक्षर होते हैं। इसे ठीक करने का एक आसान तरीका यह होगा किstd::allocator<const T>
किसी एक अतिभार को विशेषज्ञ और हटा दिया जाए।