हेडर फ़ाइल पर विचार करें:
class T
{
private:
int const ID;
public:
explicit T(int const ID_) noexcept : ID(ID_) {}
int GetID() const noexcept { return ID; }
};
या, वैकल्पिक रूप से:
class T
{
private:
int const ID;
public:
explicit T(int const ID_) noexcept;
int GetID() const noexcept;
};
inline T::T(int const ID_) noexcept : ID(ID_) {}
inline int T::GetID() const noexcept { return ID; }
पूर्व-मॉड्यूल की दुनिया में, इन हेडर को ओडीआर उल्लंघन के बिना कई टीयू में शाब्दिक रूप से शामिल किया जा सकता है। इसके अलावा, चूंकि शामिल सदस्य कार्य अपेक्षाकृत छोटे हैं, इसलिए संकलक "इनलाइन" (उन कार्यों का उपयोग करते समय फ़ंक्शन कॉल से बचें) की संभावना रखते हैं, या यहां तक कि T
पूरी तरह से कुछ उदाहरणों को अनुकूलित करते हैं।
बैठक की हालिया रिपोर्ट में जहां C ++ 20 समाप्त हो गया था, मैं निम्नलिखित कथन पढ़ सकता था:
हमने
inline
मॉड्यूल इंटरफेस के अर्थ को स्पष्ट किया : आशय यह है कि फ़ंक्शन के निकाय जिन्हें स्पष्ट रूप से घोषितinline
नहीं किया गया है, वे मॉड्यूल के ABI का हिस्सा नहीं हैं, भले ही उन फ़ंक्शन बॉडीज मॉड्यूल इंटरफ़ेस में दिखाई दें। मॉड्यूल लेखकों को अपने एबीआई पर अधिक नियंत्रण देने के लिए, मॉड्यूल इंटरफेस में वर्ग निकायों में परिभाषित सदस्य फ़ंक्शन अब अंतर्निहित नहीं हैंinline
।
मुझे यकीन नहीं है कि मैं गलत नहीं हूँ। इसका मतलब यह है कि, एक मॉड्यूल दुनिया में, कंपाइलर दूर फ़ंक्शन कॉल का अनुकूलन करने में सक्षम होने के लिए हमें उन्हें एनोटेट करना होगा, inline
भले ही वे कक्षा में परिभाषित हों?
यदि हां, तो निम्न मॉड्यूल इंटरफ़ेस ऊपर हेडर के बराबर होगा?
export module M;
export
class T
{
private:
int const ID;
public:
inline explicit T(int const ID_) noexcept : ID(ID_) {}
inline int GetID() const noexcept { return ID; }
};
भले ही मेरे पास अभी भी मॉड्यूल समर्थन के साथ एक कंपाइलर नहीं है, मैं inline
भविष्य में रीफैक्टरिंग को कम करने के लिए, उचित होने पर उपयोग करना शुरू करूंगा ।
inline
कीवर्ड के बिना मॉड्यूल में एक फ़ंक्शन कंपाइलर द्वारा कभी भी इनलेट नहीं किया जाएगा, सही?