दूसरा विकल्प प्रारंभिकरण लेकिन असाइनमेंट नहीं है। उपयोगकर्ता ने डिफॉल्ट कन्स्ट्रक्टर को परिभाषित करने वाले प्रकारों के साथ, दूसरा विकल्प डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल करेगा और बाद में असाइनमेंट ऑपरेटर (चाहे उपयोगकर्ता परिभाषित किया गया हो या नहीं) को कॉल असाइन करने के लिए कॉल करेगा।
कुछ प्रकार डिफ़ॉल्ट रूप से प्रारंभ नहीं किए जा सकते हैं: यदि आपके पास डिफ़ॉल्ट कन्स्ट्रक्टर के बिना कोई विशेषता है, तो संदर्भ (स्थिर या नहीं) रखें या निरंतर विशेषताओं को प्रारंभिक सूची में प्रारंभ किया जाना चाहिए।
सरणी मूल्य प्रारंभ प्रारंभ सूची में हो सकता है, लेकिन निर्माता शरीर में नहीं:
class X {
public:
X() : array() {} // value-initializes the array
// equivalent to:
// X() { for (int i = 0; i < 10; ++i) array[i]=0; }
private:
int array[10];
};
पॉड प्रकार के लिए, आप कर सकते हैं प्रारंभ सूची में उन्हें मूल्य आरंभ कर देगा लेकिन कोष्ठक के अंदर नहीं:
class X {
public:
X() : pod() {} // value-initializes
// equivalent to (but easier to read and subtly faster as it avoids the copy):
// X() { pod = {}; }
private:
PODType pod;
};
अंत में, कुछ कक्षाएं रचनाकारों के उपयोग के माध्यम से कार्यक्षमता प्रदान करती हैं जो डिफ़ॉल्ट निर्माण के बाद अधिक जटिल (यदि प्राप्त करने योग्य) होगी।
class X
{
public:
X() : v(10) {} // construct a vector of 10 default initialized integers
// equivalent to:
// X() { for (int i = 0; i < 10; ++i) v.push_back(0); }
private:
std::vector<int> v;
};
अंतिम, जब भी वे वास्तव में समकक्ष होते हैं, प्रारंभिक सूचियां सी ++ में अधिक मूर्खतापूर्ण होती हैं।
स्रोत
2009-03-31 17:52:39
उस लिंक पर एक वर्जित हो रही है। मुझे लगता है कि यही कारण है कि लिंक केवल जवाब निराश हैं। – wvdz
यहां वर्तमान लिंक है जो बताता है कि क्यों प्रारंभकर्ता सूचियों को प्राथमिकता दी जाती है। https://isocpp.org/wiki/faq/ctors#init-lists – NigoroJr