मैं सी ++ प्राइमर (5 वां संस्करण) के माध्यम से काम कर रहा हूं, और जब तक यह वास्तव में बहुत अच्छी सामग्री रही है, मुझे कुछ मामलों में लगता है कि मैं सिर-खरोंच स्पष्टीकरण में भाग लेता हूं जो मुझे उत्तर से अधिक प्रश्न देता है।इनलाइन फ़ंक्शंस में एकाधिक समान परिभाषा क्यों होंगी?
वर्तमान उदाहरण (बोल्ड पर जोर मेरा) में:
अन्य कार्यों, इनलाइन और constexpr कार्यों के विपरीत कार्यक्रम में कई बार में परिभाषित किया जा सकता है। आखिरकार, कोड का विस्तार करने के लिए, कंपाइलर को केवल घोषणा की परिभाषा की आवश्यकता नहीं है। हालांकि, किसी दिए गए इनलाइन या कॉन्टेक्सप्रो की सभी परिभाषाओं को बिल्कुल से मेल खाना चाहिए। नतीजतन, इनलाइन और constexpr कार्यों आमतौर पर शीर्षकों में परिभाषित किया जाता है।
मैं इस पर अनुसंधान के एक बिट किया है, और मैं कई जवाब है कि मैं जब तक परिभाषा समान है के रूप में एक इनलाइन समारोह कई बार परिभाषित करने में सक्षम हूँ देखा है। इसके अतिरिक्त, मैंने देखा है कि मानक इसके लिए अनुमति देता है। मैं क्या उत्सुक हूँ: क्यों?
क्या कोई व्यवहार्य कोडिंग स्थिति है जहां मेरे पास एक इनलाइन फ़ंक्शन के लिए दिए गए हेडर फ़ाइल के लिए मेरा # शामिल होगा, केवल मेरी .cpp फ़ाइल में डुप्लिकेट परिभाषा प्रदान करने के लिए? मुझे लगता है कि मुझे एक स्पष्ट स्थिति याद आ रही है जहां यह नियम लागू है। क्यों न केवल इसे बनाएं ताकि आप केवल हेडर फ़ंक्शन को शीर्षलेख, अवधि में परिभाषित कर सकें, और बाद में इसके बारे में चिंता न करें?
सभी बेहतरीन।
एक कार्यान्वयन "अनुवाद इकाइयों" के साथ संचालित होता है, न कि "हेडर फाइल" या "सीपीपी फाइल"। –
सी ++ भाषा में वास्तव में हेडर की धारणा नहीं है। इसमें एक अनुवाद इकाई की धारणा है, जो सभी '# शामिल' प्रीप्रोसेसर निर्देशों को निष्पादित करने के बाद अनिवार्य रूप से एक स्रोत फ़ाइल है। इसलिए, भाषा विनिर्देश सीधे स्रोत फ़ाइल में निर्दिष्ट घोषणा के बीच अंतर नहीं कर सकता है, या किसी अन्य फ़ाइल में # शामिल नहीं किया जा सकता है। आपके पास "हेडर" क्या परिभाषित करने के बिना "सभी इनलाइन फ़ंक्शंस को एक ही शीर्षलेख में परिभाषित किया जाना चाहिए" जैसे नियम नहीं हो सकते हैं, और आमतौर पर यह निर्दिष्ट करते हैं कि C++ प्रोग्राम फ़ाइलों में कैसे व्यवस्थित होता है। –
यह जानना बहुत उपयोगी है। मैं इस धारणा के तहत था कि संकलक के पास प्रीप्रोसेसर के लिए कुछ प्रकार की दृष्टि थी। धन्यवाद! – Joefers