इस मामले में यह कोई फर्क नहीं पड़ता।
लेकिन यह ऐसा करने के लिए उपयोगी हो सकता है।
आप सदस्यों की एक बड़ी संख्या फिर कुछ लेकिन होने है, तो सूची में सभी सदस्य नहीं कर सकते हैं कुछ भ्रम का कारण बनता है। इसके अलावा यह आपके दिमाग में प्रारंभिकरण के क्रम को मजबूत करता है (आदेश कक्षा में घोषणा के क्रम द्वारा परिभाषित किया जाता है, लेकिन यह बड़े वर्गों में इस आदेश को देखने के लिए उपयोगी हो सकता है जहां सभी सदस्य चर एक दूसरे के बगल में घोषित नहीं होते हैं)।
नोट: यदि आप उन्हें आंतरिककरण सूची में गलत क्रम में डालते हैं तो यह आमतौर पर अधिकांश कंपाइलरों पर एक चेतावनी है (जब तक आप चेतावनियों को त्रुटियों के रूप में संकलित नहीं करते हैं (जो आपको करना चाहिए)।
असली खतरा कक्षाओं के साथ है जिसमें पीओडी सदस्य और कंपाइलर उत्पन्न कन्स्ट्रक्टर है।
class NewFoo
{
int x;
int y;
};
// Version 1:
class Bar1
{
NewFoo f;
};
// Version 2:
class Bar2
{
NewFoo f;
public:
Bar2() // f not in list.
{}
};
// Version 3:
class Bar3
{
NewFoo f;
public:
Bar3()
: f()
{}
};
int main()
{
Bar1 b1a; // x and y not initialized.
Bar1 b1b = Bar1(); // x and y zero initialized.
Bar2 b2a; // x and y not initialized.
Bar2 b2b = Bar2(); // x and y not initialized.
Bar3 b3a; // x and y zero initialized.
Bar3 b3b = Bar3(); // x and y zero initialized.
}
स्रोत
2012-11-05 18:58:17
'_foo' पहले ही घोषणा' फू _foo से (foo के डिफ़ॉल्ट निर्माता का प्रयोग करके) प्रारंभ की है, 'आप फिर से inisialize को' का उपयोग _foo' 'बार() चाहते हैं: _foo (फू()) {} '। हालांकि, यह व्यर्थ होगा। – andre
@ ओंडरसन: यह सही नहीं है। प्रारंभकर्ता सूची में '_foo' प्रारंभ किया गया है। यह एकमात्र ऐसा स्थान है जहां सदस्यों को कक्षा में शुरू किया जाता है। 'बार(): _foo (Foo()) {}' * * _foo' को फिर से शुरू नहीं करता है - यह ** ** इसे प्रारंभ करता है। –
@ जॉन डीबलिंग ओह, मैं तब गलत था। मैं अब केरेक एसबी जवाब पढ़ने से समझता हूं। – andre