दिलचस्प पोस्ट
X तत्वों के कुछ हिस्सों में एक रूबी सरणी कैसे विभाजित करें? क्या कोई जावास्क्रिप्ट स्टेटिक एनालिसिस टूल हैं? Fancybox jQuery v1.9.0 के साथ काम नहीं करता JSF 2 में faces-config.xml का क्या उपयोग है? WebClient.DownloadString () अजीब अक्षर के साथ तार देता है java.lang.NoClassDefFound त्रुटि: संगठन / वसंतफ्रेमवर्क / कोर / एनवाईवी / कॉन्फ़िगर करने योग्य पर्यावरण मैटप्ललिब में लाइन रैपिंग के साथ टेक्स्ट बॉक्स? एक्लिप्स में "कंपाइलर अनुपालन स्तर" क्या है? क्यों जैसा कि एक चरित्र वेक्टर पर धीमा है? जीमेल मेल सर्वर का इस्तेमाल करते हुए स्थानीय होस्ट से एक्सएमएमपी PHP में चलाना क्या फ़ंक्शन पर वैकल्पिक पैरामीटर पास करने का कोई तरीका है? क्या .NET में यह पता करने का एक तरीका है कि सूची में लिस्ट बी में सभी आइटम शामिल हैं? JavaFX "स्थान आवश्यक है।" भले ही यह एक ही पैकेज में है iPhone डिवाइस बनाम iPhone सिम्युलेटर डिवेल परिवर्तन पर फायर jQuery का ईवेंट

प्रारंभिक सूची के लाभ

प्रारंभिक सूची का उपयोग करने के लाभों के बारे में मुझे क्या पता है कि वे उन सदस्यों को शुरू करने में दक्षता प्रदान करते हैं जो बिल्ड-इन नहीं हैं उदाहरण के लिए,

Fred::Fred() : x_(whatever) { }

के लिए बेहतर है,

Fred::Fred() { x_ = whatever; }

अगर x एक कस्टम क्लास का ऑब्जेक्ट है। इसके अलावा, इस शैली को स्थिरता के लिए भी अंतर्निहित प्रकारों के साथ प्रयोग किया जाता है

ऐसा करने का सबसे आम लाभ प्रदर्शन में सुधार हुआ है। यदि अभिव्यक्ति जो भी सदस्य वीरिएबल x_ के समान है, तो जो भी अभिव्यक्ति का परिणाम एक्स_ के अंदर होता है – संकलक ऑब्जेक्ट की एक अलग प्रतिलिपि नहीं करता है।

दूसरी शैली के साथ, अभिव्यक्ति जो भी एक अलग, अस्थायी ऑब्जेक्ट का निर्माण करने का कारण बनता है, और यह अस्थायी वस्तु x_ ऑब्जेक्ट के असाइनमेंट ऑपरेटर में पारित हो जाती है। तब उस अस्थायी वस्तु को नष्ट कर दिया गया; यह अक्षम है

सवाल
प्रारंभिक सूची का उपयोग करने के साथ निम्नलिखित उदाहरण में कोई दक्षता लाभ है। मुझे लगता है कि कोई लाभ नहीं है पहला संस्करण स्ट्रिंग की प्रतिलिपि कन्स्ट्रक्टर और अन्य कॉल स्ट्रिंग के असाइनमेंट ऑपरेटर को कॉल करता है (कोई अस्थायी बना हुआ नहीं है)। यह सही है?

 class MyClass { public: MyClass(string n):name(n) { } private: string name; }; class MyClass { public: MyClass(string n) { name=n; } private: string name; }; 

वेब के समाधान से एकत्रित समाधान "प्रारंभिक सूची के लाभ"

दूसरा संस्करण स्ट्रिंग के डिफ़ॉल्ट सीटीओर को बुला रहा है और फिर स्ट्रिंग की प्रति-असाइनमेंट ऑपरेटर – पहले की तुलना में निश्चित तौर पर (मामूली) दक्षता हानि हो सकती है, जो सीधे सी के कॉपी-सीटीर (जैसे, स्ट्रिंग के कार्यान्वयन के आधार पर कॉल करता है) हो सकता है बेकार आवंटन-तब कुछ छोटी संरचना का रिलीज) क्यों नहीं हमेशा सही तरीके से उपयोग करें? -)

मुझे लगता है कि const डेटा सदस्यों को प्रारंभ करने का एकमात्र तरीका प्रारंभिक सूची में है

उदाहरण के लिए। शीर्ष लेख में:

 class C { C(); private: const int x; int y; } 

और सीपीपी फ़ाइल में:

 C::C() : x( 10 ), y( 10 ) { x = 20; // fails y = 20; } 

सदस्यों को प्रारंभ करने का यह एक शानदार तरीका है कि:

  • const हैं
  • कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है (यह निजी है)

याद रखें कि प्रति निर्माता और एक असाइनमेंट ऑपरेटर के बीच एक अलग अंतर है:

  • प्रतिलिपि सीटीओआर एक नए ऑब्जेक्ट को कुछ अन्य इंस्टेंस का उपयोग करके प्रारंभिक जानकारी प्राप्त करने के लिए जगह के रूप में बनाता है।
  • असाइनमेंट ऑपरेटर पहले से ही एक मौजूदा ऑब्जेक्ट को संशोधित करता है जो पहले से पूरी तरह से पूरी तरह से तैयार हो चुका है (भले ही यह केवल एक डिफॉल्ट कन्स्ट्रक्टर का प्रयोग करके हो)

इसलिए आपके दूसरे उदाहरण में, कुछ काम पहले से ही समय के आधार पर name बनाने के लिए किया गया है

  name=n; 

पहुंच गया।

हालांकि, यह काफी संभव है (विशेष रूप से इस सरल उदाहरण में) कि काम किया जाता है गायब हो गया है (शायद केवल string ऑब्जेक्ट में कुछ डेटा सदस्यों को शून्य करना) और यह कि काम एक अनुकूलित बिल्ड में पूरी तरह से ऑप्टिमाइज़ किया गया है। लेकिन यह अभी भी प्रारंभिक सूची का उपयोग करने के लिए अच्छा फार्म माना जाता है जब भी संभव हो।

प्रारंभिक सूची का उपयोग होने पर नीचे दिए गए परिदृश्य हैं:

  1. गैर-स्थिर कॉन्स्ट डेटा सदस्यों के आरंभीकरण के लिए
  2. संदर्भ सदस्यों के आरम्भिकरण के लिए
  3. सदस्य ऑब्जेक्ट्स के आरंभीकरण के लिए जो डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है
  4. आधार वर्ग सदस्यों के आरंभीकरण के लिए
  5. जब कंस्ट्रक्टर का पैरामीटर नाम डेटा सदस्य के समान होता है
  6. प्रदर्शन के कारणों के लिए

हम आरंभीकरण सूची के माध्यम से कन्स्ट्रक्टर प्रतिनिधिमंडल भी प्रदर्शन कर सकते हैं।