struct B {
B() {}
B(int i) {}
};
struct D : B {
using B::B; // <--- new C++11 feature
};
D d1; // ok
D d2(3); // ok
"का उपयोग" अब, के साथ अग्रेषण व्युत्पन्न वर्ग के लिए अगर मैं इस तरह के रूप struct D
के शरीर के अंदर एक नया निर्माता जोड़ने के लिए,:सी ++ 11 बेस निर्माता delegating/कीवर्ड
struct D : B {
using B::B;
D(const char* pc) {} // <--- added
};
तो D d1;
शुरू होता है संकलक त्रुटि दे रहा है (ideone अभी तक अपग्रेड नहीं किया गया है, मैं g ++ 4.8.0 का उपयोग कर रहा हूं)? हालांकि D d2(3);
अभी भी काम करता है।
struct D
के अंदर एक नया कन्स्ट्रक्टर जोड़ने के दौरान डिफ़ॉल्ट कन्स्ट्रक्टर को छूट क्यों दी जाती है?
ऐसा लगता है कि मानक इस व्यवहार को निर्दिष्ट करता है: "उत्तराधिकारी कन्स्ट्रक्टर के उम्मीदवार सेट में प्रत्येक गैर-टेम्पलेट कन्स्ट्रक्टर के लिए ** कोई पैरामीटर नहीं है या एक पैरामीटर वाले प्रतिलिपि/प्रतिलिपि बनाने वाले कन्स्ट्रक्टर के अलावा **, एक कन्स्ट्रक्टर को पूरी तरह से घोषित किया जाता है [...] "[class.inhctor]/3 क्यों? पता नहीं .. – dyp
ध्यान दें कि जिस डेमो से आप लिंक कर रहे हैं वह विरासत में रचनाकारों का समर्थन नहीं करता है। आप [यहां] (http://liveworkspace.org/) आज़मा सकते हैं, लेकिन फिलहाल ऐसा लगता है। –
@DyP, कोड स्निपेट में आपने नया 'डी (कॉन्स char *) 'कन्स्ट्रक्टर – iammilind