"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C ++ एग्रीगेट टाइप इनिशियलाइज़ेशन लिस्ट को बाहरी ब्रेसिज़ की आवश्यकता कब होती है?

C ++ एग्रीगेट टाइप इनिशियलाइज़ेशन लिस्ट को बाहरी ब्रेसिज़ की आवश्यकता कब होती है?

2025-04-14 को पोस्ट किया गया
ब्राउज़ करें:690

] विशेष रूप से, प्रोग्रामर उन परिदृश्यों का सामना कर सकते हैं जहां बाहरी ब्रेसिज़ कुछ कुल प्रकारों के लिए आवश्यक दिखाई देते हैं, लेकिन दूसरों के लिए नहीं। इस लेख का उद्देश्य विषय में गहराई से जाना और बाहरी ब्रेसिज़ को कब छोड़ा जा सकता है, इस पर स्पष्टीकरण प्रदान करना है। { इंट फू; डबल बार; }; std :: सरणी a1 = // त्रुटि C2078: बहुत अधिक आरंभ करने वाले { {0, 0.1}, {२, ३.४} }; // ठीक है std :: सरणी a2 = {0.1, 2.3};

; हालाँकि, A2 के लिए बाहरी ब्रेसिज़ को छोड़ने से कोई त्रुटि नहीं होती है। यह विसंगति इस सवाल को उठाती है कि A1 के लिए बाहरी ब्रेसिज़ की आवश्यकता क्यों है, लेकिन A2 के लिए नहीं। STD :: सरणी को एक समुच्चय और एक सादे पुराने डेटाटाइप (POD) के रूप में वर्गीकृत किया गया है, जबकि अन्य मानक पुस्तकालय कंटेनर नहीं हैं। उपयोगकर्ता-परिभाषित कंस्ट्रक्टरों के साथ कंटेनरों के विपरीत, STD :: सरणी में एक नहीं है। इसका पहला डेटा सदस्य आकार n का एक सरणी है, जो एक टेम्पलेट तर्क के रूप में निर्दिष्ट है। इस डेटा सदस्य को सीधे एक इनिशियलाइज़र सूची का उपयोग करके आरंभ किया जाता है। अतिरिक्त ब्रेसिज़ आवश्यक हैं क्योंकि वे आंतरिक सरणी को संलग्न करते हैं जिसे आरंभीकृत किया जा रहा है। संरचना aarray { एक डेटा [2]; // एक आंतरिक सरणी }; { {// आंतरिक सरणी का आरंभीकरण शुरू करता है {// आंतरिक सरणी के पहले तत्व को इनिशियलाइज़ करता है 0, 0.1 }, // पहले तत्व के आरंभीकरण को समाप्त करता है {2, 3.4} // आंतरिक सरणी के दूसरे तत्व को इनिशियलाइज़ करता है } // आंतरिक सरणी के आरंभीकरण को समाप्त करता है }; // त्रुटि: बहुत सारे इनिशियलाइज़र अगर ब्रेसिज़ का उपयोग नहीं कर रहे हैं Aarray b1 = { 0, 0.1, 2, 3.4 }; इसके बजाय, std :: सरणी को आदिमों का एकत्र माना जाता है। निम्न कोड बाहरी ब्रेसिज़ के बिना मान्य है क्योंकि आदिम मानों को सीधे समतल के भीतर आरंभ किया जाता है: When are Outer Braces Necessary in C   Initializer Lists for Aggregates?

std :: सरणी a2 = {0.1, 2.3}; सी 11 विनिर्देश के खंड §8.5.1/11 में कहा गया है कि यदि इनिशियलाइज़र-सूची एक बाएं ब्रेस के साथ शुरू होती है, तो प्रत्येक बाद के अल्पविराम-सेपरेटेड सूची इनिशियलाइज़र-क्लॉज़ के सदस्यों को एक सबग्रेगेट के सदस्यों को इनिशियलाइज़ करती है। दूसरी ओर, यदि एक सबग्रेगेट के लिए इनिशियलाइज़र-सूची एक बाएं ब्रेस के साथ शुरू नहीं होती है, तो केवल पर्याप्त इनिशियलाइज़र-क्लॉज़ को सबग्रेगेट सदस्यों को इनिशियलाइज़ करने के लिए लिया जाएगा, जिसमें किसी भी शेष इनिशियलाइज़र-क्लॉज़ के साथ अगली एग्रीगेट सदस्य को इनिशियलाइज़ किया जाता है। एग्रीगेट्स और पॉड स्ट्रक्चर, जैसे कि एसटीडी :: सरणी, क्योंकि इन प्रकारों में उपयोगकर्ता-परिभाषित कंस्ट्रक्टर्स नहीं होते हैं और आंतरिक सरणी को सीधे आरंभ किया जाता है। आदिम प्रकारों के लिए, दूसरी ओर, बाहरी ब्रेसिज़ को छोड़ा जा सकता है क्योंकि आदिम मूल्यों को सीधे कुल के भीतर आरंभ किया जाता है। इन मामलों के बीच के अंतर को समझकर, प्रोग्रामर सही आरंभीकरण सुनिश्चित कर सकते हैं और कंपाइलर त्रुटियों से बच सकते हैं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3