मैं अक्सर सी ++ में बड़े, गैर-टेम्पलेट वर्गों में भाग लेता हूं जहां कार्यान्वयन फ़ाइल में अलग-अलग की बजाय हेडर फ़ाइल में सरल निकायों को सीधे कक्षा में परिभाषित किया जाता है। उदाहरण के लिए:सी ++ विधियों को कक्षाओं के भीतर कभी-कभी परिभाषित क्यों किया जाता है?
class Foo {
int getBar() const { return bar; }
...
};
ऐसा क्यों करते हैं? ऐसा लगता है जैसे नुकसान हैं। कार्यान्वयन उतना छुपा नहीं है जितना होना चाहिए, कोड कम पठनीय है, और अगर कंपाइलर पर कई बोल्डों को शामिल किया जाता है तो क्लासलर में बढ़ता बोझ भी होगा।
मेरा अनुमान है कि लोग इन मॉडलों को अन्य मॉड्यूल में रेखांकित करने का इरादा रखते हैं, जो प्रदर्शन में काफी सुधार कर सकते हैं। हालांकि, मैंने सुना है कि नए कंपाइलर मॉड्यूल में लिंक-टाइम पर इनलाइनिंग (और अन्य इंटरप्रोसेडुरल ऑप्टिमाइज़ेशन) कर सकते हैं। इस तरह के लिंक-टाइम अनुकूलन के लिए समर्थन कितना व्यापक है, और क्या यह वास्तव में इस तरह की परिभाषाओं को अनावश्यक बनाता है? क्या इन परिभाषाओं के लिए कोई और अच्छा कारण है?
हां, लेकिन "डिफ़ॉल्ट रूप से इनलाइन" का मतलब यह नहीं है कि संकलक उन्हें इनलाइन कर देगा, केवल इतना है कि आपको मैन्युअल रूप से * संकेत * जोड़ना नहीं है कि वास्तव में "इनलाइन" कीवर्ड है। –