संघ सदस्य सक्रिय क्या बनाता है?संघ सदस्य सक्रिय क्या करता है?
मैंने सी ++ 14 मानक (यूनियनों के बारे में एक) के अध्याय 9.5 को पढ़ा है, लेकिन मुझे एक संघीय सदस्य को सक्रिय करने का स्पष्ट उत्तर नहीं मिला है। ,
सामान्य तौर पर एक एक संघ के सक्रिय सदस्य को बदलने के लिए स्पष्ट नाशक कॉल और नियुक्ति के नए ऑपरेटरों का उपयोग करना चाहिए:
एक नोट है।
उदाहरण के लिए,
union U {
int i;
short s;
} u;
new(&u.i) int(42);
ठीक है, नियुक्ति नए परिवर्तन सक्रिय सदस्य, यह स्पष्ट है। लेकिन हम आमतौर पर छोटे कन्स्ट्रक्टर के साथ प्रकार के साथ काम करते समय प्लेसमेंट नए का उपयोग नहीं करते हैं।
operator=
यूबी के बिना सक्रिय सदस्य को बदलें?
u.i = 42;
यहाँ, operator=
एक Unconstructed वस्तु पर कहा जाता है। क्या यह अच्छी तरह परिभाषित है?
इसके बारे में क्या?
struct A {
int i0;
int i1;
};
union U {
A a;
short s;
} u;
क्या a
बनाता u
का सक्रिय सदस्य होने के लिए? i0
& i1
दोनों को सेट कर रहा है?
u.a.i0 = 42;
u.a.i1 = 99;
क्या होगा यदि मैं लिखना:
u.a.i0 = 42; // supposedly this doesn't change the active member to a, as i1 isn't set
int x = u.a.i0; // is it fine to read from a.i0? a is not an active member supposedly
u.a.i0 = 42;
के बाद, सक्रिय सदस्य a
(मुझे लगता है कि) में बदल नहीं है, तो यह यूबी int x = u.a.i0;
क्या करना है?
क्या सी ++ 17 सक्रिय सदस्यों के विवरण पर सुधार करता है?
"यहाँ,' ऑपरेटर = 'एक Unconstructed पर बुलाया वस्तु "क्या आप निश्चित हैं? यह पीओडी है तो यह ठीक लगता है। – BartoszKP
लेमेन परिभाषा यह है कि यह आखिरी बार लिखा गया तत्व है। लेकिन मुझे मानक में इसका कोई महत्व नहीं मिल रहा है। – SergeyA
@ BartoszKP: ठीक है, यह डायनेमिक टाइप निश्चित रूप से (?) 'Int' नहीं है, इसलिए ... मुझे नहीं पता :) – geza