डिफ़ॉल्ट-आरंभीकरण मानक शब्द से एक शब्द है जिसका अर्थ है कि कोई भी आरंभीकरण नहीं है, इसलिए आपका मतलब शून्य-आरंभीकरण से है ।
Cppreference.com पर विवरण वास्तव में थोड़ा भ्रामक है। std::array
एक समग्र वर्ग है, और यदि तत्व प्रकार आदिम है, तो यह POD: "सादा पुराना डेटा," है, जिसमें शब्दार्थ सी भाषा को बारीकी से मिलाता है। का अनुमानित परिभाषित निर्माता std::array< int, N >
एक तुच्छ है जो बिल्कुल कुछ भी नहीं करता है।
सिंटेक्स की तरह std::array< int, 3 >()
या std::array< int, 3 > x{}
जो शून्य मान प्रदान करते हैं, एक निर्माता को आमंत्रित करके ऐसा नहीं करते हैं। शून्य प्राप्त करना मूल्य-आरंभ का हिस्सा है , जो C ++ 11 /8.5 / 8 में निर्दिष्ट है:
टी प्रकार की एक वस्तु को महत्व देने के लिए इसका मतलब है:
- यदि T उपयोगकर्ता-प्रदान या हटाए गए डिफ़ॉल्ट निर्माता के बिना एक (संभवतः cv-योग्य) वर्ग प्रकार है, तो ऑब्जेक्ट शून्य-आरंभीकृत है ... और यदि T में एक गैर-तुच्छ डिफ़ॉल्ट निर्माता है, तो ऑब्जेक्ट डिफ़ॉल्ट-आरंभीकृत है;
std::array
कोई उपयोगकर्ता-प्रदान डिफ़ॉल्ट निर्माता नहीं है, इसलिए यह शून्य-आरंभिक हो जाता है। इसमें एक अंतर्निहित परिभाषित डिफ़ॉल्ट निर्माता है, लेकिन यह तुच्छ है, इसलिए यह कभी भी डिफ़ॉल्ट-प्रारंभिक नहीं है। (लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि परिभाषा के अनुसार तुच्छ आरंभीकरण का रनटाइम पर कोई प्रभाव नहीं पड़ता है।)
यदि नहीं, तो क्या कोई वाक्यविन्यास है जो सभी तत्वों (शून्य-आकार के सरणियों सहित) पर सभी तत्वों को उनके डिफ़ॉल्ट मान पर आरंभ करने के लिए काम करेगा?
C- शैली सरणियाँ और std::array
दोनों समुच्चय हैं, और किसी भी समुच्चय को पूरी तरह से शून्य-आरंभ करने का तरीका वाक्यविन्यास के साथ है = {}
। यह C ++ 98 के बाद से काम करता है। ध्यान दें कि C- शैली सरणियों में शून्य सीमा नहीं हो सकती है, और sizeof (std::array< X, 0 >)
यह शून्य नहीं है।
T x[N]
वाक्यविन्यास के बराबर है ।