तीन प्रासंगिक प्रकार के प्रारंभिकरण, शून्य-प्रारंभिकरण, डिफ़ॉल्ट-प्रारंभिकरण, और क्रमशः बूल माध्य के लिए मूल्य-प्रारंभिकरण, कि बूल को गलत माना जाता है, कि बूल का अनिश्चित मूल्य होता है, और बूल है झूठी शुरू हुई।
तो आपको बस यह सुनिश्चित करने की आवश्यकता है कि आपको शून्य या मूल्य प्रारंभिकरण मिल रहा है। यदि स्वचालित या गतिशील संग्रहण अवधि वाला ऑब्जेक्ट प्रारंभिक प्रारंभकर्ता के बिना प्रारंभ किया जाता है तो आपको डिफ़ॉल्ट-प्रारंभिकता मिलती है। मूल्य-प्रारंभिकरण प्राप्त करने के लिए आपको एक खाली प्रारंभकर्ता की आवश्यकता है, या तो ()
या {}
।
bool b{}; // b is value-initialized
bool *b2 = new bool{}; // *b2 is value-initialized
class foo {
bool b;
foo() : b() {}
};
foo f; // // f.b is value-initialized
आप एक bool स्थिर या थ्रेड स्थानीय भंडारण अवधि है और एक प्रारंभकर्ता नहीं है कि के लिए शून्य प्रारंभ मिलता है।
static bool b; // b is zero-initialized
thread_local bool b2; // b2 is zero-initialized
एक अन्य मामले आप अगर bool एक उपयोगकर्ता द्वारा प्रदान की निर्माता के बिना एक वर्ग के एक सदस्य और है शून्य प्रारंभ है, जहां मिल अंतर्निहित डिफ़ॉल्ट निर्माता तुच्छ है, और वर्ग उदाहरण शून्य है या value- प्रारंभ।
class foo {
bool b;
};
foo f{}; // f.b is zero-initialized
thread_local foo f2; // f2.b is zero-initialized
ध्यान दें कि मेरा कोड एक टेम्पलेट में है जिसका टेम्पलेट इस प्रश्न के मामले में बूल है, लेकिन गैर-पीओडी भी हो सकता है, जिसके लिए मैं डिफ़ॉल्ट कन्स्ट्रक्टर चाहता हूं। – WilliamKF