It recently came to my attention सदस्य सदस्य पूरी तरह से छाया कक्षा के अंदर एक ही नाम के साथ नि: शुल्क कार्य करता है। और पूरी तरह से मेरा मतलब है कि एक ही नाम के साथ हर मुफ्त समारोह को ओवरलोड रिज़ॉल्यूशन के लिए बिल्कुल नहीं माना जाता है। मैं समझ सकता क्यों यह इस तरह somwthing साथ किया जाता है:कक्षा सदस्य समान नाम के साथ छाया मुक्त फ़ंक्शंस क्यों काम करता है?
void f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
जहां कार्यों समान हस्ताक्षर है, चर scoping के रूप में अपनी ही प्राकृतिक उसी तरह काम करता है। लेकिन क्यों unambigious कॉल निषेध जहां मुक्त समारोह इस तरह अलग अलग हस्ताक्षर हैं:
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
मैं कैसे एक वर्ग अंदर से आच्छादित मुक्त समारोह कॉल करने के लिए नहीं कह रहा हूँ। मैं जो जानना चाहता हूं वह इस डिजाइन के पीछे तर्क है।
आपको Bjarne Stroustrup से पूछने की आवश्यकता हो सकती है! – peacemaker
इस तरह की खोज का मतलब है कि उत्पन्न उम्मीदवार कार्यों की सूची हमेशा छोटी होती है। संकलन के समय के लिए यह अच्छा है, आप कल्पना कर सकते हैं कि क्या उसने सभी संभावित उम्मीदवारों (एडीएल समेत) की खोज की है और वहां कई टेम्पलेट्स थे जो बहुत जल्दी धीमे हो जाएंगे। यह ज्यादातर मामलों में उपयोग और वांछित अर्थशास्त्र भी दर्पण करता है। आम तौर पर जब आप कहते हैं कि 'foo'' foo' जिसे आप सोच रहे हैं वह निकटतम है। यदि यह निकटतम नहीं है तो यह सिर्फ गलती की संभावना है। रन टाइम पर अजीब चीजें होने से एक त्रुटि बेहतर है। चीजों को स्थानीय रखना अच्छा व्यवहार है। – Flexo
आप नाम प्रस्तुति पर इस प्रस्तुति का आनंद ले सकते हैं: http://channel9.msdn.com/Series/C9- व्याख्यान- स्टीफन- टी-लाववेज- कोर- सी-/स्टीफन- टी- लववेज- कोर- सी -1- -एन – MFH