चूंकि यह एक अस्थायी से एक प्रति है, यह और शायद बाहर अनुकूलित किया जाएगा कर सकते हैं
कीवर्ड यहाँ शायद है। मानक प्रतिलिपि बनाने के लिए एक कंपाइलर की आवश्यकता नहीं है, लेकिन इसकी आवश्यकता नहीं है। अगर कुछ कंपेलरों ने इस कोड को (अनुकूलित) की अनुमति दी, लेकिन अन्य ने इसे अस्वीकार कर दिया (गैर अनुकूलित), यह बहुत असंगत होगा।
तो मानक इसे संभालने का एक सतत तरीका निर्धारित करता है - हर किसी को यह जांचना होगा कि कॉपी कन्स्ट्रक्टर पहुंच योग्य है, चाहे वे इसका उपयोग करें या नहीं।
विचार यह है कि सभी कंपाइलर्स को या तो कोड स्वीकार करना चाहिए या इसे अस्वीकार करना चाहिए। अन्यथा यह गैर पोर्टेबल होगा।
एक अन्य उदाहरण पर विचार
A a;
B b;
A a1 = a;
A a2 = b;
यह भी उतना ही a2
अनुमति देने के लिए असंगत होगा, लेकिन न करे a1
जब A
रों कॉपी निर्माता निजी है।
हम भी मानक पाठ है कि एक वर्ग वस्तु आरंभ के दो तरीके अलग होने के लिए लक्षित कर रहे थे से देख सकते हैं (8.5/16):
, आरंभीकरण डायरेक्ट-आरंभीकरण है या यदि यह प्रति-प्रारंभिकता है जहां स्रोत प्रकार का सीवी-अयोग्य संस्करण समान वर्ग है, या गंतव्य की कक्षा का व्युत्पन्न वर्ग है, तो रचनाकारों पर विचार किया जाता है। लागू कन्स्ट्रक्टर को गणना की जाती है (13.3.1.3), और सबसे अच्छा अधिभार संकल्प (13.3) के माध्यम से चुना जाता है। इस तरह के कन्स्ट्रक्टर को ऑब्जेक्ट को आरंभ करने के लिए कहा जाता है, प्रारंभकर्ता अभिव्यक्ति या अभिव्यक्ति-सूची इसके तर्क के रूप में। यदि कोई कन्स्ट्रक्टर लागू नहीं होता है, या ओवरलोड रिज़ॉल्यूशन संदिग्ध है, तो प्रारंभिकता खराब है।
अन्यथा (यानी, शेष प्रति-प्रारंभिक मामलों के लिए), उपयोगकर्ता द्वारा परिभाषित रूपांतरण अनुक्रम जो स्रोत प्रकार से गंतव्य प्रकार में परिवर्तित हो सकते हैं या (जब एक रूपांतरण फ़ंक्शन का उपयोग किया जाता है) को व्युत्पन्न वर्ग में समझा जाता है 13.3.1.4 में वर्णित है, और सबसे अच्छा अधिभार संकल्प (13.3) के माध्यम से चुना जाता है। यदि रूपांतरण नहीं किया जा सकता है या संदिग्ध है, तो प्रारंभिकता खराब हो गई है। चयनित फ़ंक्शन को प्रारंभिक अभिव्यक्ति के साथ इसके तर्क के रूप में जाना जाता है; यदि फ़ंक्शन एक कन्स्ट्रक्टर है, तो कॉल गंतव्य प्रकार के सीवी-अयोग्य संस्करण का अस्थायी प्रारंभ करता है। अस्थायी एक प्रावधान है।कॉल का नतीजा (जो कि कन्स्ट्रक्टर केस के लिए अस्थायी है) का उपयोग उपर्युक्त नियमों के मुताबिक, प्रतिलिपि बनाने के लिए किया जाता है, ऑब्जेक्ट जो प्रति-प्रारंभिकता का गंतव्य है। कुछ मामलों में, इंटरमीडिएट परिणाम को प्रारंभिक वस्तु में सीधे बनाकर इस प्रत्यक्ष-प्रारंभिकरण में अंतर्निहित प्रतिलिपि को समाप्त करने के लिए कार्यान्वयन की अनुमति है; 12.2, 12.8 देखें।
एक अंतर यह है कि प्रत्यक्ष-प्रारंभिकता सीधे निर्मित वर्ग के रचनाकारों का उपयोग करती है। प्रति-प्रारंभिकरण के साथ, अन्य रूपांतरण कार्यों पर विचार किया जाता है और ये एक अस्थायी उत्पन्न कर सकते हैं जिसे प्रतिलिपि बनाना है।
मुझे एक संपादन में जाना पड़ा है। अगर मैंने कुछ भी उलझा लिया है, तो कृपया इसे वापस रखें :-) –
@SteveJessop: टैग की गई भाषा वकील को टैग किया जाना चाहिए। –
@ एएलएस: शायद, मुझे उस टैग का उद्देश्य पता नहीं है। सवाल का विचार है कि वास्तव में * कहता है कि spec * के बारे में ठीक बाल को विभाजित नहीं करना है, और यह वही है जो मैं भाषा-कानून के रूप में सोचता हूं। अगर इसे अनुमति है तो मैं इसे भाषा-डिजाइन टैग करना पसंद करूंगा। –