समारोह छोटी है, तो (मौका आप बदल जाएगा यह अक्सर कम है), और समारोह हेडर में अन्य हेडर संयुक्त असंख्य सहित (क्योंकि आपके समारोह उन पर निर्भर करता है) के बिना रखा जा सकता है, तो यह ऐसा करने के लिए पूरी तरह से मान्य है।
headera.h: आप उन्हें निर्वासन इनलाइन की घोषणा करते हैं, तो संकलक यह हर संकलन इकाई के लिए एक ही पते देने के लिए आवश्यक है
inline string method() {
return something;
}
सदस्य कार्यों निहित इनलाइन प्रदान की जाती हैं वे अंदर परिभाषित कर रहे हैं उनकी कक्षा उनके लिए वही सामान सच है: यदि उन्हें परेशानी के बिना हेडर में रखा जा सकता है, तो आप वास्तव में ऐसा कर सकते हैं।
क्योंकि फ़ंक्शन का कोड शीर्षलेख में दिखाई देता है और दृश्यमान होता है, तो कंपाइलर कॉल को इनलाइन करने में सक्षम होता है, यानी कॉल साइट पर सीधे फ़ंक्शन का कोड डालना (इतना नहीं कि आप पहले इनलाइन डालते हैं यह, लेकिन अधिक क्योंकि संकलक इस तरह से निर्णय लेता है, हालांकि, इनलाइन को केवल उस के बारे में संकलक के लिए एक संकेत है)। इसके परिणामस्वरूप प्रदर्शन सुधार हो सकता है, क्योंकि संकलक अब देखता है कि तर्क फ़ंक्शन के लिए स्थानीय चर से मेल खाता है, और जहां तर्क एक-दूसरे को उपनाम नहीं करता है - और अंतिम लेकिन कम से कम नहीं, फ़ंक्शन फ़्रेम आवंटन की आवश्यकता नहीं है।
मेरी समझ तब होती है जब संकलन किया जाता है, संकलक हेडर फ़ाइल का विस्तार करेगा और इसे कहां शामिल किया जाएगा। क्या वो सही है?
हाँ, यह सही है।फ़ंक्शन को प्रत्येक स्थान पर परिभाषित किया जाएगा जहां आप अपना हेडर शामिल करते हैं। कंपाइलर दूसरों को खत्म करके परिणामस्वरूप प्रोग्राम में केवल एक उदाहरण डालने की परवाह करेगा।
स्रोत
2009-01-17 14:44:05
धन्यवाद। ये सभी छोटे कार्य वर्चुअल हैं। क्या इससे इनलाइनिंग में कोई फर्क पड़ता है? और मुझे लगता है कि स्रोत फ़ाइल में फ़ंक्शन बॉडी लिखना और इनलाइन के रूप में चिह्नित करना सीधे शीर्षलेख में लिखने से बेहतर है। मुझे डर है, अगर इन सभी कार्यों को परिभाषित किया गया है तो हेडर फ़ाइल कम पठनीय होगी। –
यदि संकलक वर्चुअल फ़ंक्शन कॉल की दिशा का पता लगा सकता है, तो यह भी इनलाइन कर सकता है: b * b_ = new d; छदाम (b_); // अगर यह initines inlines, यह देखेंगे कि बी_ डी है। तो यह वर्चुअल फ़ंक्शन परिभाषा के कोड को रेखांकित कर सकता है क्योंकि यह डी में है। वर्चुअल इसे और अधिक कठिन बनाता है, लेकिन असंभव नहीं –
लेकिन मैं आपसे सहमत हूं: मैं कोड को हेडर में डालने में अक्सर रूचि रखता हूं, क्योंकि जब मैं इसे बदलता हूं, तो यह इसे नियंत्रित करने वाले सभी कोड को प्रभावित करता है, और अक्सर हेडर में परिभाषित करने की आवश्यकता होती है कोड कम से कम एक अन्य शीर्षलेख पर निर्भर करता है। (हमेशा आसान नहीं है। सरल गेटर्स के लिए, मैंने उन्हें वहां रखा)। –