मुझे आश्चर्य है कि क्यों std::bitset::reference
और std::vector<bool>::reference
एक स्पष्ट विनाशक निर्दिष्ट करता है (संकलक उत्पन्न नहीं होता है)। क्योंकि, उदाहरण के लिए, boost::dynamic_bitset::reference
ऐसा विनाशक निर्दिष्ट नहीं करता है।सी ++ मानक std :: bitset :: संदर्भ के लिए विनाशक क्यों निर्दिष्ट करता है?
उत्तर
सिर्फ इसलिए कि मानक एक नाशक के रूप में ~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>
- 1. Bitset संदर्भ
- 2. std :: bitset :: आकार गैर-स्थिर
- 3. std :: गैर-सार्वजनिक विनाशक
- 4. std :: thread कितना मानक है?
- 5. क्यों std :: bitset उदाहरण में बिट्स का स्वैप काम नहीं करता है?
- 6. क्यों विज़ुअल सी ++ 6 निजी विनाशक पर शिकायत करता है
- 7. std के विनाशक ओवरराइडिंग: अपवाद
- 8. कक्षा + वस्तुओं के std :: वेक्टर के साथ सी ++ विनाशक समस्या
- 9. BitSet
- 10. क्या सी ++ मानक समर्थन प्रक्रिया करता है?
- 11. क्यूस्ट्रिंग :: toStdString() std :: स्ट्रिंग विनाशक
- 12. क्या सी ++ मानक फ़्लोटिंग पॉइंट नंबरों के प्रतिनिधित्व पर कुछ भी निर्दिष्ट करता है?
- 13. टाइप_इनफ़ो :: नाम() निर्दिष्ट क्यों है?
- 14. डिफ़ॉल्ट विनाशक कितना करता है
- 15. std :: सूची <std::future> विनाशक
- 16. सी ++ कॉन्स std :: नक्शा संदर्भ
- 17. सी ++ मानक लाइब्रेरी - std :: setenv बनाम setenv
- 18. std :: vector :: clear() कन्स्ट्रक्टर और विनाशक में
- 19. सी ++ मानक लेआउट और संदर्भ
- 20. std :: std :: set के साथ काम क्यों नहीं करता है?
- 21. क्या सी ++ मानक में std :: bin जोड़ने का प्रस्ताव रहा है?
- 22. std :: u16cout क्यों गुम है?
- 23. std :: reverse_iterator :: ऑपरेटर [] का रिटर्न प्रकार क्यों निर्दिष्ट नहीं है?
- 24. भविष्य का विनाशक 'std :: async` अवरुद्ध से क्यों लौटाया गया है?
- 25. मानक मुझे विनाशकों के बिना वर्ग आवंटित करने के लिए क्यों मुक्त करता है?
- 26. क्यों std करता :: वेक्टर :: डालने सम्मिलन बिंदु
- 27. std :: bitset <8> वैरिएबल 11111111 को संभालने में असमर्थ क्यों है?
- 28. सी ++ विनाशक एक डिलीट ऑपरेटर को कॉल करता है?
- 29. सी ++ इंटरफेस जैसी कक्षाओं के लिए विनाशक
- 30. एंडल (std :: cout) संकलित क्यों करता है
किसी ने 1990 में इस लिखा, और कोई भी के बाद से इसे बदलने के लिए प्रस्ताव किया है? कोई अन्य कारण नहीं, मुझे लगता है। –