2016-06-04 3 views
5

N4567 के रूप में मानक प्रारूप पता चलता है कि एक डिफॉल्ट की डिफ़ॉल्ट निर्माता के रूप में नष्ट करता है, तो-अनुसार 12.1, पैरा 4 परिभाषित किया गया है:कॉन्स-क्वालिफाइड वेरिएंट सदस्यों से युक्त एक संघ का कोई डिफ़ॉल्ट डिफॉल्ट कन्स्ट्रक्टर नहीं होता है?

एक्स एक संघ और अपने संस्करण के सदस्यों के सभी स्थिरांक के हैं - योग्य प्रकार (या सरणी),

दूसरे शब्दों में, यह कहने के बराबर है कि, यदि इसके संस्करण सदस्यों में से कोई एक योग्यता नहीं है, तो उपरोक्त नियम लागू नहीं होता है। मेरा प्रश्न है:

  • क्या इसके सभी सदस्यों को होने स्थिरांक-योग्य (विपरीत स्थिति की तुलना में जहां उन लोगों में से कम से कम एक स्थिरांक-योग्य नहीं है), और क्या में परिप्रेक्ष्य यह है के बारे में ऐसी क्या खास बात है एक डिफ़ॉल्ट डिफ़ॉल्ट कन्स्ट्रक्टर से गहराई से संबंधित?

उत्तर

4

मान लीजिए आप केवल स्थिरांक के सदस्यों के साथ एक संघ है:

union Foo { 
    const int x; 
    const double y; 
} 

एक डिफ़ॉल्ट निर्माता जो सदस्यों के प्रारंभ और सक्रिय सदस्य बनने का निर्णय करना होगा। एक बार बनाया गया है कि आप किसी भी सदस्य के मूल्य को नहीं बदल सकते हैं (वे सभी स्थिर हैं) इस प्रकार आप सक्रिय सदस्य भी नहीं बदल सकते हैं। इस प्रकार ऐसा निर्माण यूनियन के रूप में बेकार होगा।

दूसरी ओर, अगर एक सदस्य स्थिरांक नहीं है:

union Bar { 
    int x; 
    const double y; 
    Bar() : y(10.0) {} 
} 

एक डिफ़ॉल्ट निर्माता मतलब सकता है, क्योंकि आप अभी भी बाद में के माध्यम से

Bar b; 
b.x = 10; 
+1

मैं नहीं सक्रिय सदस्य को बदल सकते हैं समझें कि ऐसा निर्माण बेकार क्यों होगा। यह एक अपरिवर्तनीय संस्करण होगा। – Columbo

+1

@ कोल्लमबो: आमतौर पर इस प्रकार को डिजाइन करने के लिए बेहतर होगा ताकि अपरिवर्तनीयता न बनें, फिर जब आप चाहें अपरिवर्तनीयता को जोड़ने के लिए 'कॉन्स्ट फू' ​​का उपयोग करें। लेकिन यह सिर्फ एक डिजाइन पसंद है। –

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

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