2013-03-04 4 views
6

मैं हाल ही में बहुत सी पढ़ाई कर रहा हूं और विरासत (और आभासी कार्यों) को कवर करते हुए मैं "इनलाइन" कीवर्ड में ठोकर खा रहा हूं। अब मुझे पता है कि सामान्य अर्थ में इनलाइन क्या है- कंपाइलर फ़ंक्शन कॉल को सटीक कोड से बदल सकता है। हालांकि, विरासत के संबंध में मैंने कितनी बार उल्लेख किया है- क्या विरासत में इनलाइन का उपयोग करने के लिए कुछ विशेष कारण है? मुझे समझ नहीं आता क्यों यह उल्लेख किया जा रहा रखता है ....विरासत और इनलाइन?

क्या अतिरिक्त भूमिका एक इनलाइन समारोह विरासत/व्युत्पन्न वर्ग के भीतर है/आभासी कार्यों?

+0

@ बिलीओनेल मुझे नहीं लगता कि लिंक वास्तव में बताता है कि वास्तव में कनेक्शन क्या है (यदि कोई है तो)। – user997112

+1

एक बार फिर .... यह एक डुप्लिकेट नहीं है। मैं पूछ रहा हूं कि लिंक क्या है ..... वह प्रश्न पूछ रहा है कि क्या वर्चुअल फ़ंक्शन पर इनलाइन डालना व्यर्थ है .... किसी ऐसे व्यक्ति के लिए यह आसान है जो उत्तर को समान रूप से एक प्रश्न खोजने के उत्तर को जानता हो- लेकिन यह ' इसका मतलब समान नहीं है। मैं जवाब नहीं जानता और पढ़ रहा हूं कि दूसरे प्रश्न ने मदद नहीं की है। – user997112

उत्तर

2

हां, आभासी कार्यों पर इनलाइन का उपयोग समय की बर्बादी है। वर्चुअल फ़ंक्शन टेबल के माध्यम से वर्चुअल फ़ंक्शन को कॉल करना होता है, जो फ़ंक्शन पॉइंटर्स से बना होता है। एक इनलाइन फ़ंक्शन को पॉइंटर द्वारा नहीं कहा जा सकता है। यह एक असली समारोह के रूप में मौजूद होना है।

कुछ अपवाद हैं। जहां कॉलर सटीक ऑब्जेक्ट प्रकार जानता है, यह वर्चुअल फ़ंक्शन तालिका को पूरी तरह से छोड़ सकता है।

वर्चुअल कीवर्ड का अत्यधिक उपयोग परिणामस्वरूप बहुत धीमी कोड हो सकता है। जहां संकलक तीन या चार छोटे फ़ंक्शन कॉल को इनलाइन और ऑप्टिमाइज़ करने में सक्षम हो सकता है, वर्चुअल फ़ंक्शंस के साथ इसे वास्तविक फ़ंक्शन कॉल करना होता है, मेमोरी के बारे में कोई धारणा नहीं होती है या कॉल के बीच स्थिति पंजीकृत नहीं होती है।

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