c++ - Indirect array assignment works, while direct array assignment does not -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 4 जवाब
के बीच अंतर क्या है दो सरणी कार्य, एक संरचना के अंदर और एक संरचना के बाहर एक?
struct ए {char s [4]; }; Int main (int argc, char * argv []) {char s [4]; चार डी [4]; डी = एस; // 'अमान्य सरणी असाइनमेंट' ए ए, बी; बी = ए; // समस्याओं के बिना संकलन 0; } डिफ़ॉल्ट ऑपरेटर = सदस्य-द्वारा-सदस्य असाइनमेंट ऑपरेटरों को आमंत्रित करने के लिए माना जाता है। यदि ऐसा है, तो एक सरणी असाइनमेंट ऑपरेटर मौजूद होना चाहिए, लेकिन संकलक इसे स्पष्ट रूप से लागू नहीं करना चाहता। क्यों?
मुझे लगता है कि यही कारण है ... संरचना एक वर्ग वस्तु है और यह विशेष नियम है सदस्य की असाइनमेंट के लिए यह एक सरणी है, न कि एक सरणी के लिए ():
12.8 क्लास ऑब्जेक्ट्स को कॉपी और बढ़ाना
12.8.28 एक गैर-यूनियन वर्ग एक्स के लिए निहित-परिभाषित प्रतिलिपि / स्थानांतरण असाइनमेंट ऑपरेटर अपने सबोबैजेस का सदस्यवार प्रतिलिपि / स्थानांतरण कार्य करते हैं। एक्स के सीधा आधार वर्ग पहले निर्दिष्ट किए जाते हैं, बेस-स्पेसिफायर-सूची में उनके घोषणापत्र के क्रम में, और फिर एक्स के तात्कालिक गैर-स्टैटिक डेटा सदस्यों को उस क्रम में निर्दिष्ट किया जाता है, जिसमें उन्हें कक्षा परिभाषा में घोषित किया गया था । चलो एक्स या तो फ़ंक्शन के पैरामीटर या, चाल ऑपरेटर के लिए, पैरामीटर का संदर्भ देते हुए एक एक्सवेल। प्रत्येक subobject को इसके प्रकार के लिए उपयुक्त तरीके से असाइन किया जाता है:
- - यदि उप-ऑब्जेक्ट एक सरणी है, तो प्रत्येक तत्व तत्व प्रकार के अनुसार उचित तरीके से असाइन किया जाता है; < / Li>
इस प्रकार प्रति प्रक्रिया को किसी सरणी के लिए परिभाषित नहीं किया गया है (क्योंकि यह एक अनमोडिविएबल चर प्रकार है), लेकिन एक सदस्य प्रकार के लिए जो एक सरणी है। कोई सरणी के लिए ऑपरेटर = के लिए कोई परिभाषा नहीं है।
Comments
Post a Comment