सी ++ 03 में, एक पीओडी प्रकार डिफ़ॉल्ट रूप से प्रारंभ हो जाता है अगर() छोड़ा जाता है अन्यथा यह मूल्य-प्रारंभिक होता है।
यह बिल्कुल नहीं होता है। सी ++ 03 spec के अनुसार, खंड 8.5/9, यदि कोई प्रारंभिक पॉड-प्रकार ऑब्जेक्ट के लिए कोई प्रारंभकर्ता निर्दिष्ट नहीं है, तो यह और उसके उप-ऑब्जेक्ट्स में "अनिश्चित प्रारंभिक मान है"। यह डिफ़ॉल्ट-प्रारंभिक जैसी ही बात है। डिफ़ॉल्ट-प्रारंभिकता एक ही चीज़ है जो पीओडी-प्रकार के लिए मूल्य-प्रारंभिकता है, जिसका अर्थ यह होगा कि ऑब्जेक्ट शून्य-प्रारंभिक (8.5/5) है, लेकिन यह केवल खाली प्रारंभकर्ता (यानी खाली-संश्लेषण) की उपस्थिति के साथ हो सकता है प्रति 8.5/7)। इस प्रकार आप एक खाली प्रारंभकर्ता के साथ केवल पीओडी-प्रकार को डिफ़ॉल्ट और/या मूल्य-प्रारंभ कर सकते हैं। गैर स्थैतिक पीओडी-प्रकार के लिए डिफ़ॉल्ट प्रारंभ तब नहीं होता जब कोई प्रारंभकर्ता निर्दिष्ट नहीं होता है।
आपके दूसरे उदाहरण में, गैर-पीओडी प्रकार के साथ जिसमें उपयोगकर्ता द्वारा परिभाषित कन्स्ट्रक्टर है, डिफ़ॉल्ट-प्रारंभिक तकनीकी रूप से तब होता है जब आप मान-प्रारंभकर्ता (कोष्ठक) प्रतीकों को छोड़ देते हैं। दूसरे शब्दों में:
bar* ptr_a = new bar; //default initialization
bar* ptr_b = new bar(); //value initialization
ध्यान रखें कि हालांकि दोनों गैर पॉड struct या वर्ग-प्रकार के साथ, अगर वहाँ एक उपयोगकर्ता परिभाषित निर्माता, डिफ़ॉल्ट-प्रारंभ और मूल्य आरंभीकरण, प्रति 8.5/5 है, दोनों कॉल उपयोगकर्ता परिभाषित कन्स्ट्रक्टर। तो अंत में, bar
के प्रकार के साथ, जैसा कि आपने इसे घोषित किया है, डिफ़ॉल्ट और मूल्य प्रारंभिकता एक ही चीज़ कर रही है।
आपके उदाहरण में, 'बार' के कन्स्ट्रक्टर के लिए कॉल' x' के प्रारंभ के दौरान मूल्य प्रदान करने के परिणामस्वरूप। – Chad