कोई भी कूदता है और कहता है Profile before optimize!
, यह केवल एक जिज्ञासा प्रश्न है और this original question से उपजी है।क्या सी ++ कंपाइलर अप्रयुक्त रिटर्न वैल्यू को 'संदर्भ` से ऑप्टिमाइज़ करेगा?
यदि मैं एक ही वस्तु के संदर्भ में लौट रहा हूं, तो क्या इसका उपयोग नहीं किया जाता है? उदाहरण के लिए, मेरे पास Vector<>
है जिसमें विभिन्न गणितीय फ़ंक्शन हैं (मान लें कि मैं ऑपरेटर ओवरलोडिंग का उपयोग नहीं कर रहा हूं)। इसे लिखने के दो तरीके हैं:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
या
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
अब अगर Add()
वापसी मान के उपयोग के बिना प्रयोग किया जाता है, संकलक बस दूर वापसी पूरी तरह फेंक होगा और जैसे कि यह कोई है समारोह हो जाता है शुरू करने के लिए वापसी मूल्य? और क्या होगा यदि यह inlined
नहीं है?
+1, अभी तक एक और अच्छा जवाब हमेशा के रूप में :) –
यह मानता है कि संकलक प्रत्येक बार इसे संसाधित करने के बजाए फ़ंक्शन को संसाधित करेगा। कई आधुनिक कंपाइलर्स बाद में (या करने के लिए कॉन्फ़िगर किया जा सकता है) करते हैं। ऐसा करने के कारणों में से एक यह है कि इस तरह के अनुकूलन को ठीक से अनुमति दें। –
"जब तक संकलक कोड नंबर को रेखांकित नहीं कर रहा है" - अर्थात् 'आजकल, एलटीओ के साथ, सभी गैर-साझा-ऑब्जेक्ट कोड को रेखांकित किया जा सकता है, तो शायद हां' :-) –