2013-06-05 8 views
7

कुछ दिन पहले, जबकि Standard C++ news पढ़ने मुझे लगता है कि लेख में पोस्ट के बारे में Defaulted functions in C++11, पढ़ा है उल्लेख किया गया है कि उपयोगकर्ता परिभाषित निर्माता संकलक द्वारा उत्पन्न एक से कम कुशल है:उपयोगकर्ता परिभाषित डिफ़ॉल्ट रचनाकार कम कुशल हैं?

उपयोगकर्ता परिभाषित डिफॉल्ट कन्स्ट्रक्टर संकलक से स्पष्ट रूप से परिभाषित डिफ़ॉल्ट कन्स्ट्रक्टर से कम कुशल है।

पढ़ने जारी रखते हुए, वहाँ एक उदाहरण है जहां एक उपयोगकर्ता परिभाषित निर्माता डिफ़ॉल्ट के रूप में चिह्नित किया जाता है, और फिर कहते हैं:

स्पष्ट चूक निर्माता एक मैन्युअल रूप से प्रोग्राम किया डिफ़ॉल्ट निर्माता से अधिक कुशल है।

मैं इन कथनों समझ में नहीं आता, तो मैं सोच रहा था:

  • क्यों एक उपयोगकर्ता के डिफ़ॉल्ट निर्माता (या विशेष सदस्य समारोह) कम कुशल से संकलक परोक्ष एक परिभाषित हो सकता है?
  • कन्स्ट्रक्टर (या विशेष सदस्य फ़ंक्शन) को स्पष्ट रूप से डिफॉल्ट करके दक्षता में सुधार कैसे किया जाता है?
  • एक कन्स्ट्रक्टर (या विशेष सदस्य फ़ंक्शन) को डिफ़ॉल्ट रूप से चुनने के लिए मुझे कौन से दिशानिर्देशों का पालन करना होगा और दक्षता इस निर्णय को कैसे प्रभावित करती है?
+0

http://stackoverflow.com/questions/4275861/why-would-the-implicitly-generated-constructor-et-al-be-more- कुशल-than-a?rq = 1 – shivakumar

+0

अच्छा एक @ शिवकुमार लेकिन दोनों प्रश्नों का अभी तक एक स्वीकार्य उत्तर नहीं है, यहां तक ​​कि आपने जो भी उल्लेख किया है वह 2010 से है! : ओ –

उत्तर

3

मुझे लगता है कि एक बेहतर बयान है कि उपयोगकर्ता-निर्धारित डिफ़ॉल्ट निर्माता बाहर उत्पन्न एक संकलक की तुलना में कम कुशल हो सकता है।

उदाहरण के लिए, जब यह आंतरिक रूप से एक डिफ़ॉल्ट कन्स्ट्रक्टर उत्पन्न कर रहा है तो संकलक धारणाओं और अनुकूलन करने में सक्षम हो सकता है जो यह उपयोगकर्ता द्वारा परिभाषित contstructor (दुष्प्रभावों को ध्यान में रखता है) के लिए नहीं कर सकता है।

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

+0

* "यह भी ध्यान रखें कि उपयोगकर्ता द्वारा परिभाषित डिफ़ॉल्ट कन्स्ट्रक्टर डिफ़ॉल्ट रूप से अपने सभी सदस्यों का निर्माण करने से पूरी तरह से अलग काम कर सकता है" * - बेशक, लेकिन मुझे लगता है कि मामला चर्चा से बाहर है। लेकिन संभव बड़े पैमाने पर अनुकूलन के बारे में अच्छी बात है। –

0

और हम सभी जानते हैं कि यदि यह इंटरनेट पर लिखा गया है तो यह सही होना चाहिए ... रुको, क्या हम?

लेख में जहां मुझे कम कुशलता का पहला दावा मिला, लेखक सत्य बताता है। यद्यपि आप इसे गलत तरीके से समझते हैं - उदाहरण में यह हाथ से तैयार किए गए सीटीओ असाइनमेंट का उपयोग करता है। किसी भी अच्छे कारण के लिए, और 2 दशक पुराने दिशानिर्देशों के खिलाफ जा रहा है।

अगला उदाहरण, वही मामला। (एक व्यावहारिक नोट के रूप में मैं जोड़ना होगा, अनुकूलन मैं भी उस रूप के लिए एक ही ऐसी उत्पादन की उम्मीद का दावा करते हुए कहा कि किसी भी संकलक के लिए ...)

मैं कोई कारण नहीं क्यों उचित हस्तलिखित ctor से अलग होगा देखना दक्षता सहित किसी भी तरीके से डिफ़ॉल्ट। ओटीओएच अगर वे समान हैं तो पृथ्वी पर क्यों लिखते हैं? मैं सब बहुत खुश हूं कि संकलक इसे मेरे लिए बनाता है। और अंततः मैं इसे कुछ तरीकों से भी नियंत्रित कर सकता हूं जो मैं पहले नहीं कर सका। ऐसे कार्यों का अधिक उपयोग कर सकते हैं। ;-)

+0

"* और हम सभी जानते हैं कि यदि यह इंटरनेट पर लिखा गया है तो यह सही होना चाहिए *" मैंने माना है कि यह फ़ॉन्ट के कारण सही होना चाहिए;) यही कारण है कि मैं फ़ॉन्ट का उल्लेख करता हूं। –

संबंधित मुद्दे