2012-03-19 179 views
7

मान लें कि हमारे पास परिभाषित कन्स्ट्रक्टर X(int value) के साथ कक्षा X है।"एक्स एक्स (42)" और "एक्स एक्स = 42" का उपयोग कर ऑब्जेक्ट निर्माण में अंतर?

क्या यह अर्थात् समकक्ष है या नहीं?

X x = 42; 
X x(42); 

मेरा मानना ​​है कि अंतर दिखाई देगा हम एक्स के निर्माता को स्पष्ट कीवर्ड केवल तभी जब अन्यथा संकलक X x(42);

कृपया करने के लिए अभिव्यक्ति X x = 42; कम हो जाएगा, मुझे ठीक कर लें मैं गलत हूँ।

उत्तर

7

रूप

X x = 42; 

कि निर्माता गैर स्पष्ट और एक सुलभ कॉपी-निर्माता हो कि हो की आवश्यकता है के रूप में घोषित नहीं किया गया है। कार्यान्वयन को अस्थायी बनाने और इसे कॉपी करने की अनुमति है, लेकिन मुझे पता नहीं है कि कोई कार्यान्वयन नहीं है।

+0

क्या यह एक स्पष्ट असाइनमेंट ऑपरेटर को बाईपास करेगा? मैंने सोचा होगा कि वह उस मार्ग को ले जाएगा। लेकिन मेरा दिमाग स्वीकार्य रूप से थोड़ा अस्पष्ट रहा है। –

+2

नहीं, इसे अस्थायी बनाने की अनुमति नहीं है। क्या आप इसे 'एक्स एक्स = एक्स (42)' के साथ भ्रमित कर रहे हैं? – Pubby

+3

@ पब्बी: हां यह है - इसे किसी कारण से _copy प्रारंभकरण_ कहा जाता है। ; -] हालांकि व्यवहार में, यह हमेशा elided होगा। – ildjarn

5

शब्दार्थ दो आपरेशन विनिर्देश में भाषा के आधार पर अलग-अलग हैं, लेकिन संकलन के बाद प्रभावी परिणाम निम्न परिस्थितियों में ही कर रहे हैं:

  1. X के लिए एक एकल तर्क निर्माता है कि एक अभिन्न ले जा सकते हैं नहीं है -प्रकार और तर्क प्रकार गैर-कॉन्स एल-वैल्यू संदर्भ नहीं है
  2. X के लिए एक एकल तर्क निर्माता है जहां एक अभिन्न प्रकार को तर्क प्रकार में परिवर्तित किया जा सकता है, और जहां तर्क फिर से गैर- कॉन्स एल-वैल्यू संदर्भ
  3. # 2 के मामले में, निर्माता explicit
+4

यह एक * लंबी * वाक्य है। – avakar

+0

हाहा, सच ... तय :-) – Jason

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