सबसे पहले, मैं समझाता हूं कि मेम-इनिशियलाइज़र-सूची क्या है। एक मेम-प्रारंभकर्ता-सूची की एक अल्पविराम द्वारा पृथक सूची है मेम-प्रारंभकर्ता रों है, जहां प्रत्येक मेम-प्रारंभकर्ता एक सदस्य नाम होता है (
, एक के बाद अभिव्यक्ति की सूची , एक के बाद )
। अभिव्यक्ति-सूची कैसे सदस्य का निर्माण किया जाता है। उदाहरण के लिए, में
static const char s_str[] = "bodacydo";
class Example
{
private:
int *ptr;
string name;
string *pname;
string &rname;
const string &crname;
int age;
public:
Example()
: name(s_str, s_str + 8), rname(name), crname(name), age(-4)
{
}
};
उपयोगकर्ता- प्रदायक की मेम-इनिशियल-लिस्ट , नो-आर्ग्युमेंट्स कंस्ट्रक्टर है name(s_str, s_str + 8), rname(name), crname(name), age(-4)
। इस मेमरी-इनिशियलाइज़र-लिस्ट का अर्थ है कि name
सदस्य को कंस्ट्रक्टर द्वारा इनिशियलाइज़ किया गया है std::string
जो दो इनपुट पुनरावृत्तियों को लेता है , rname
सदस्य को एक संदर्भ के साथ आरंभीकृत किया जाता है name
, crname
सदस्य को एक कॉन्सर्ट-रेफ़रेंस के साथ आरंभीकृत किया जाता है name
, और age
सदस्य को इनिशियलाइज़ किया जाता है -4
।
प्रत्येक कंस्ट्रक्टर की अपनी मेम-इनिशियल-लिस्ट होती है , और सदस्यों को केवल एक निर्धारित क्रम में शुरू किया जा सकता है (मूल रूप से वह क्रम जिसमें सदस्यों को वर्ग में घोषित किया जाता है)। इस प्रकार, के सदस्यों Example
कर सकते हैं केवल क्रम में प्रारंभ: ptr
, name
, pname
, rname
, crname
, और age
।
जब आप किसी सदस्य का मेम-इनिशियलाइज़र निर्दिष्ट नहीं करते हैं , तो C ++ मानक कहता है:
यदि इकाई एक नॉनस्टैटिक डेटा सदस्य है ... वर्ग प्रकार की ..., तो इकाई डिफ़ॉल्ट-आरंभिक (8.5) है। ... अन्यथा, इकाई आरंभिक नहीं है।
यहाँ, क्योंकि name
क्लास प्रकार का एक नॉनस्टैटिक डेटा सदस्य है, यह डिफ़ॉल्ट-इनिशियलाइज़्ड है यदि कोई इनिशियलाइज़र मेम-इनिशियलाइज़र-सूचीname
में निर्दिष्ट नहीं किया गया था । अन्य सभी सदस्यों के पास वर्ग का प्रकार नहीं है, इसलिए वे आरंभिक नहीं हैं।Example
जब मानक कहता है कि वे आरंभिक नहीं हैं, तो इसका मतलब है कि उनका कोई भी मूल्य हो सकता है । इस प्रकार, क्योंकि उपरोक्त कोड ने प्रारंभ नहीं किया था pname
, यह कुछ भी हो सकता है।
ध्यान दें कि आपको अभी भी अन्य नियमों का पालन करना है, जैसे कि नियम जो संदर्भों को हमेशा आरंभीकृत किया जाना चाहिए। संदर्भों को प्रारंभ नहीं करना एक संकलक त्रुटि है।