2015-12-18 7 views
5

मुझे आश्चर्य है कि क्यों std::bitset::reference और std::vector<bool>::reference एक स्पष्ट विनाशक निर्दिष्ट करता है (संकलक उत्पन्न नहीं होता है)। क्योंकि, उदाहरण के लिए, boost::dynamic_bitset::reference ऐसा विनाशक निर्दिष्ट नहीं करता है।सी ++ मानक std :: bitset :: संदर्भ के लिए विनाशक क्यों निर्दिष्ट करता है?

+8

किसी ने 1990 में इस लिखा, और कोई भी के बाद से इसे बदलने के लिए प्रस्ताव किया है? कोई अन्य कारण नहीं, मुझे लगता है। –

उत्तर

3

सिर्फ इसलिए कि मानक एक नाशक के रूप में ~reference() का उल्लेख है, मतलब यह नहीं है यह उपयोगकर्ता द्वारा प्रदान की नो-सेशन {} के रूप में हो गया है (जो कैसे libstdc++ और SGI/STL यह करते हैं)। इसे =default के रूप में भी घोषित किया जा सकता है, या यहां तक ​​कि स्पष्ट रूप से परिभाषित बाएं भी हो सकता है (जो libc++ करता है)। भले ही, विनाशक को हटाए गए इस स्पष्ट उल्लेख के लिए मानक को अद्यतन किया जा सके। आप एक संपादकीय परिवर्तन दर्ज कर सकते हैं (मुझे नहीं लगता कि यह एक वास्तविक प्रस्ताव वारंट करता है)।

टिप्पणियों में @ बोपर्सन द्वारा नोट किया गया है, std::bitset मानक पुस्तकालय का एक बहुत पुराना घटक है। इसकी कई विशेषताएं (अप्रमाणित पूर्णांक से निहित कन्स्ट्रक्टर, गैर-सदस्य operator== के बजाय सदस्य) 1 99 8 में भाषा मानकीकरण की पूर्व-तिथि। निर्बाध प्लग: उदाहरण देखें अधिक चर्चा के लिए this Q&A यह कैसे उत्पन्न हो सकता है, और this Q&A क्यों यह तय किया जाएगा जब यह कोड तोड़ सकता है।

<rant mode>

std::bitset की विरासत से बाहर का सबसे अच्छा तरीका namespace experimental में एक साफ तोड़ होगा। अधिमानतः, यह std::bitset के मिश्रित अमूर्तता को भी हल करेगा, जो एक ही समय में array<bool> के स्पेस अनुकूलित संस्करण के साथ-साथ set<int> होने का प्रयास करता है। आदर्श रूप से, bool_array<N> और bounded_int_set<N> के लिए एक प्रस्ताव होगा जो इन अवशेषों को प्रदान करता है। इसी तरह, bool_vector<Alloc> (वर्तमान में vector<bool, Alloc> के रूप में जाना जाता है) और int_set<Alloc> (वर्तमान में boost::dynamic_bitset और boost::container::flat_set<int, Alloc> का मिश्रण) परिभाषित किया जा सकता है।

</rant mode>

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