7
int a[10]; 
int b[10]; 
a = b; 

//C++ डिफ़ॉल्ट असाइनमेंट ऑपरेटर

struct test { 
    int a[10]; 
}; 

test a,b; 
a = b; 

पहले कोड संकलन नहीं है, क्योंकि हम नहीं कर सकते सरणी आवंटित है, लेकिन दूसरा नहीं करता है। क्लास का डिफ़ॉल्ट असाइनमेंट ऑपरेटर बस प्रत्येक डेटा सदस्यों के लिए असाइनमेंट कॉल नहीं करता है? दूसरा कोड संकलित क्यों करता है?

+0

डिफ़ॉल्ट वर्ग असाइनमेंट ऑपरेटर एक सरणी के सभी तत्वों को कॉपी कर देंगे। यह है कि 'std :: array' उपयोगकर्ता द्वारा प्रदत्त एक के बिना कैसे काम करता है। – chris

+1

क्योंकि सदस्यों के रूप में सरणी के लिए एक विशेष अपवाद बनाया गया था। –

+0

std :: array क्यों शामिल है? क्या मैं कुछ भूल रहा हूँ? – Frodo

उत्तर

4

सी ++ 11 मसौदा से, खंड 12.8:

एक गैर संघ दसवीं कक्षा के लिए निहित से परिभाषित कॉपी/कदम असाइनमेंट ऑपरेटर करता है इसकी subobjects के सदस्य वार कॉपी/चाल काम। एक्स के प्रत्यक्ष आधार वर्गों को पहले निर्दिष्ट किया गया है, आधार-विनिर्देशक सूची में उनकी घोषणा के क्रम में, और फिर एक्स के तत्काल गैर स्थैतिक डेटा सदस्यों को असाइन किया गया है, जिस क्रम में उन्हें कक्षा परिभाषा में घोषित किया गया था । एक्स को या तो फंक्शन का पैरामीटर या चालक ऑपरेटर के लिए पैरामीटर का संदर्भ देने वाला एक xvalue होने दें। प्रत्येक सबोबजेक्ट को इसके प्रकार के लिए उचित तरीके से असाइन किया गया है:

- यदि उपरोक्त वर्ग प्रकार का है, जैसे कि ऑपरेटर को कॉल द्वारा = उपरोक्त के साथ उपरोक्त वस्तु के रूप में और एक ही फ़ंक्शन के रूप में x के संबंधित उपरोक्त तर्क (जैसे कि स्पष्ट योग्यता द्वारा; यानी, अधिक व्युत्पन्न कक्षाओं में किसी भी संभावित आभासी ओवरराइडिंग कार्यों को अनदेखा करना);

- यदि उपरोक्त एक सरणी है, तो प्रत्येक तत्व को तत्व प्रकार के लिए उचित तरीके से असाइन किया गया है;

- यदि उपरोक्त स्केलर प्रकार का है, तो अंतर्निहित असाइनमेंट ऑपरेटर का उपयोग किया जाता है।

यहाँ महत्वपूर्ण हिस्सा है: if the subobject is an array, each element is assigned, in the manner appropriate to the element type;

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