तो मैं std::vector
के विनिर्देश को देख रहा था और देखा कि reference
टाइपपीफसे सी ++ 03 से value_type&
में C++ 11 में बदल गया है। मैं आश्चर्यचकित था, इसलिए मैंने गहरी लगना शुरू कर दिया है।आवंटक :: संदर्भ चरणबद्ध क्यों किया जा रहा है?
C++ में 03 §20.1.5 [lib.allocator.requirements] वहाँ तालिका 32 जिसमें X::reference
होने की T&
और X::const_reference
T const&
होने के लिए परिभाषित किया गया है परिभाषित किया गया है।
हालांकि, सी ++ 11 §17.6.3.5 [allocator.requirements] में तालिका 28 है जिसमें reference
और const_reference
गुम हैं।
अगला हमारे पास §20.6.8 std::allocator_traits
सी ++ 11 में जोड़ा गया है जिसमें reference
शामिल नहीं है। लेकिन §20.6.9 std::allocator
करता है।
अंत में, वहाँ §23.2.1 [container.requirements.general] जो X::reference
परिभाषित "T
की lvalue" होने के लिए और X::const_reference
"T
की स्थिरांक lvalue" किया जाना है।
तो, मैं googled है और इस पत्र (1, 2) कि संभाजक आवश्यकताओं से reference
को हटाने का प्रस्ताव मिला, लेकिन यह इसके पीछे किसी भी तर्क उल्लेख नहीं है। लेकिन LWG issue भी है जो परिवर्तन का विरोध करता है।
इसके अलावा, मैं पाया है the interview with Alexander Stepanov जिसमें उन्होंने बात करती है reference
कैसे समाहित मशीन विशिष्ट स्मृति लेआउट और Herb Sutter's post जिसमें उन्होंने कंटेनर तत्वों, कंटेनर आवश्यकताओं और कैसे std::vector<bool>
एक कंटेनर नहीं है की ओर इशारा लेने के बारे में बात करती है।
तो, आप इन सब के बारे में क्या सोचते हैं? reference
उपयोगी था, क्या यह इसके उद्देश्य की सेवा करता था? "फैंसी" संदर्भ मानक में कैसे फिट होते हैं? क्या यह पूरी तरह से उन्हें खत्म करने के लिए एक साहसिक कदम है, अधिक सख्त कंटेनर आवश्यकताओं को बनाते हैं और std::vector<bool>
को हटा देते हैं?
अच्छी तरह से शोध किए गए प्रश्न – David
नहीं, यह बहुत बोल्ड नहीं है। अगर कोई std :: vector –