दिलचस्प पोस्ट
डब्लूपीएफ़ कमांडपैमेट्रर पहली बार नल है जिसे कैनक्सक्च्यूट कहा जाता है कैसे निजी कुंजी के साथ। यदि onclick निष्पादित है मैं HREF कैसे अक्षम कर सकता हूँ? क्यों स्विच / केस और नहीं अगर / अगर अन्यथा? दृश्य स्टूडियो 2005 डिजाइनर नियंत्रण और आकार बदलता है फॉर्म एक फ़ाइल के एन्कोडिंग को कैसे पता चलेगा? सी# नियमित अभिव्यक्तियों के साथ मिलान करने वाले नंबर – केवल अंक और अल्पविराम प्रक्रिया का उपयोग करें। पथ में पैरामीटर और स्थान के साथ प्रारंभ करें एक java.util.Calendar / Date के लिए TIMEZONE को बदलने के लिए पोस्टग्रेज़: तालिका को विदेशी कुंजी में सूचीबद्ध करने के लिए SQL ग्रहण परियोजना में Log4j.properties डाल करने के लिए सही स्थान कहां है? Jquery स्क्रिप्ट JSFiddle में काम करता है लेकिन एचटीएमएल पेज पर नहीं जेएसओएन से एक्सएमएल रूपांतरण के जावा कार्यान्वयन जावा में टाइमस्टैम्प तिथि को कैसे परिवर्तित करें? अजगर स्ट्रिंग। नियमित अभिव्यक्ति

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

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

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; }; 

Solutions Collecting From Web of "प्रारंभिक सूची के लाभ"

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

मुझे लगता है कि 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. प्रदर्शन के कारणों के लिए

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