संभव डुप्लिकेट:
What’s the motivation behind having copy and direct initialization behave differently?कॉपी प्रारंभिकरण की तरह क्यों है? कॉपी कन्स्ट्रक्टर की आवश्यकता क्यों है?
और प्रतिलिपि प्रारंभ से, मैं इतना की तरह मतलब है:
struct MyStruct
{
MyStruct(int) {}
MyStruct(const MyStruct&) {}
};
MyStruct s = 5; // needs *both* the int and copy constructor
सी ++ साल के लिए में प्रोग्रामिंग के बावजूद, मैं कभी नहीं उपरोक्त कोड का एहसास कॉपी कन्स्ट्रक्टर की आवश्यकता है (जोगोजपन के लिए धन्यवाद)। अस्थायी हमेशा से elided किया गया था, और इस तरह के रूप में मुझे यह भी पता नहीं था कि यह भी अस्तित्व में था (कम से कम एक सतही स्तर पर, इसे अनुकूलित करने के बावजूद) जब तक यह मुझे इंगित नहीं किया गया।
गुडलिंग की एक सभ्य राशि के बाद, मुझे यह पता चलता है कि यह कैसे काम करता है। मेरा प्रश्न है क्यों यह वही तरीका है?
मानक क्यों नहीं बनाया गया है कि उपर्युक्त उदाहरण को कॉपी कन्स्ट्रक्टर की आवश्यकता नहीं है? क्या कोई विशिष्ट मामला/उदाहरण है जो दिखाता है कि इस प्रकार के प्रारंभिकरण में कॉपी कन्स्ट्रक्टर की आवश्यकता महत्वपूर्ण है?
की एक सभ्य विवरण के बिना क्यों बातें मैं सिर्फ एक कष्टप्रद विरूपण साक्ष्य के रूप में देखते वे जिस तरह से वे कर रहे हैं कर रहे हैं, लेकिन वहाँ कुछ महत्वपूर्ण है कि मैं याद कर रहा हूँ कि अगर मैं नहीं बल्कि नहीं अज्ञानी होगा।
ऐसा लगता प्रति निर्माता की है कि जरूरत है नाम के लिए; असल में यह [नहीं कहा जाता है] (http://ideone.com/35fjAD)। – iammilind
@iammilind: इसे कॉल करने की आवश्यकता नहीं है ** प्रतिलिपि ** की प्रतिलिपि है, लेकिन कॉपी कन्स्ट्रक्टर को सुलभ होने की आवश्यकता है। असल में, इसका मतलब है कि मानक * प्रतिलिपि * कॉपी कन्स्ट्रक्टर को कॉल करने की अनुमति देता है और यह ** ** उपलब्ध रहना। ऑप्टिमाइज़ेशन मानक मानकीकृत गारंटी नहीं है इसके विपरीत मानक मानक है। –
@ जेसे गुड: इसके लिए धन्यवाद। ऐसा लगता है कि यह बहुत डुप्लिकेट है। उदासीनता की तरह उस अन्य प्रश्न पर कोई अच्छा जवाब नहीं है ... – Cornstalks