2008-11-05 9 views
10

मैं अक्सर सी ++ में बड़े, गैर-टेम्पलेट वर्गों में भाग लेता हूं जहां कार्यान्वयन फ़ाइल में अलग-अलग की बजाय हेडर फ़ाइल में सरल निकायों को सीधे कक्षा में परिभाषित किया जाता है। उदाहरण के लिए:सी ++ विधियों को कक्षाओं के भीतर कभी-कभी परिभाषित क्यों किया जाता है?

class Foo { 
    int getBar() const { return bar; } 
    ... 
}; 

ऐसा क्यों करते हैं? ऐसा लगता है जैसे नुकसान हैं। कार्यान्वयन उतना छुपा नहीं है जितना होना चाहिए, कोड कम पठनीय है, और अगर कंपाइलर पर कई बोल्डों को शामिल किया जाता है तो क्लासलर में बढ़ता बोझ भी होगा।

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

उत्तर

14

सी ++ मानक कहता है कि कक्षा परिभाषा के अंदर परिभाषित विधियां डिफ़ॉल्ट रूप से inline हैं। यह गेटर्स और सेटर्स जैसे सरल कार्यों के लिए स्पष्ट प्रदर्शन लाभ में परिणाम देता है। लिंक-टाइम क्रॉस-मॉड्यूल ऑप्टिमाइज़ेशन कठिन है, हालांकि कुछ कंपाइलर इसे कर सकते हैं।

+1

हां, लेकिन "डिफ़ॉल्ट रूप से इनलाइन" का मतलब यह नहीं है कि संकलक उन्हें इनलाइन कर देगा, केवल इतना है कि आपको मैन्युअल रूप से * संकेत * जोड़ना नहीं है कि वास्तव में "इनलाइन" कीवर्ड है। –

2

आपने अपने स्वयं के प्रश्न का उत्तर दिया, वे वास्तव में इनलाइन तरीकों हैं।

उनका उपयोग करने के कारण प्रदर्शन हैं।

+0

फिर भी, इसका मतलब यह नहीं है कि संकलक उन्हें इनलाइन कर देगा, केवल इतना है कि आपको मैन्युअल रूप से * संकेत * जोड़ना नहीं है कि वास्तव में "इनलाइन" कीवर्ड है। –

7

अक्सर इसके अलावा कोई आसान कारण नहीं है और समय बचाता है। हेडर फ़ाइल में समान संख्या में लाइनों को लेते समय, यह कार्यान्वयन फ़ाइल में थोड़ा अव्यवस्था भी बचाता है। और कम पठनीय होने के कारण यह काफी खिंचाव है अगर यह गेटर्स और सेटर्स जैसी चीजों तक ही सीमित है।

+0

छोटी कोड के साथ स्रोत फ़ाइल को अव्यवस्थित करने की आवश्यकता नहीं है। –

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

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