2009-07-13 15 views
28

मैं हाल ही में कुछ अजीब दिखने वर्ग है कि तीन कंस्ट्रक्टर्स था भर में आया था:मल्टी-Arg कन्स्ट्रक्टर पर स्पष्ट कीवर्ड?

class Class 
{ 
    public: 
     explicit Class(int); 

     Class(AnotherClass); 

     explicit Class(YetAnotherClass, AnotherClass); 

    // ... 
} 

यह वास्तव में मेरे लिए कोई मतलब नहीं है - मैंने सोचा था कि स्पष्ट कीवर्ड एक विदेशी प्रकार से संकलक चुना निर्माण की रक्षा के लिए है।

क्या यह अनुमति है? यदि यह है, तो इसका क्या अर्थ है?

+0

इस डुप्लिकेट को अधिक/बेहतर उत्तर मिल गए: [डिफ़ॉल्ट कन्स्ट्रक्टर और कन्स्ट्रक्टर के लिए 2 या अधिक (गैर-डिफ़ॉल्ट) पैरामीटर के साथ स्पष्ट अनुमति क्यों है?] (Https://stackoverflow.com/questions/4467142/why-is- स्पष्ट-अनुमत-डिफॉल्ट-कन्स्ट्रक्टर-और-कन्स्ट्रक्टर-साथ-2-या-अधिक) –

उत्तर

46

सी ++ में 11 बहु-पैरामीटर कन्स्ट्रक्टरों को पूरी तरह से ब्रेस प्रारंभिकरण में परिवर्तित किया जा सकता है।

हालांकि, सी ++ 11 explicit से पहले केवल एकल-तर्क रचनाकारों पर लागू होता है। एकाधिक-तर्क रचनाकारों के लिए, इसे अनदेखा किया गया था और had no effect

+1

स्पष्टीकरण के लिए धन्यवाद। मुझे लगता है कि जीसीसी इस तरह के अवसर के लिए चेतावनी देगा। – LiraNuna

+26

चेतावनी के साथ कि यदि मल्टी-एर्ग पैराम्स में से प्रत्येक के पास डिफ़ॉल्ट मान हैं तो इसका प्रभाव – zebrabox

+20

होगा यह C++ 11 के साथ बदल गया है। अब मल्टी-पैरामीटर कन्स्ट्रक्टर को ब्रेस प्रारंभिकरण के साथ पूरी तरह से परिवर्तित किया जा सकता है। – Shane

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