2010-10-20 16 views
7

यदि किसी सदस्य फ़ंक्शन को कक्षा के अंदर परिभाषित किया गया है, तो यह एक इनलाइन फ़ंक्शन है। जैसेक्या एक मित्र फ़ंक्शन को स्वचालित रूप से इनलाइन में परिभाषित किया गया है?

struct X 
{ 
    void mem_f() {} //mem_f is inline 
}; 

मेरा सवाल यह है कि कक्षा के अंदर परिभाषित एक गैर-सदस्य मित्र कार्य स्वचालित रूप से इनलाइन भी है।

उदा।

struct Y 
{ 
    friend void friend_f() {} //is friend_f inline? 
}; 

मानक से एक प्रासंगिक उद्धरण/पैराग्राफ_नो का स्वागत है। धन्यवाद।

उत्तर

13

हां, यह है। §11.4/5:

एक समारोह एक वर्ग के एक दोस्त घोषणा में परिभाषित किया जा सकता यदि और केवल यदि वर्ग एक गैर-स्थानीय वर्ग (9.8), समारोह नाम अयोग्य है, और फ़ंक्शन में नेमस्पेस स्कोप है। ऐसा फ़ंक्शन अंतर्निहित रूप से इनलाइन है। में परिभाषित एक मित्र फ़ंक्शन की श्रेणी (लेक्सिकल) दायरे में है जिसे कक्षा परिभाषित किया गया है। कक्षा के बाहर परिभाषित मित्र फ़ंक्शन (3.4.1) नहीं है।

चूंकि वर्ग परिभाषा संभवतया हेडर फ़ाइल में है, इसलिए फ़ंक्शन को बहुगुणित किया जाएगा, इसलिए इसे inline होना चाहिए।

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

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