2011-11-17 22 views
6

संभव डुप्लिकेट में अधिक भार:
List of C++ name resolution (and overloading) rulesसमारोह सी ++

कैसे संकलक का फैसला करता है के लिए C++ नियम जो चुनने के लिए कार्य करते क्या हैं? (जिसे एक ही नाम के साथ दो फ़ंक्शंस दिए गए हैं - कंपाइलर दूसरे पर एक फ़ंक्शन को कैसे चुनता/प्राथमिकता देता है, मुख्य रूप से मैं जानना चाहता हूं कि कंपाइलर किस प्रकार का कास्टिंग चुनता है जब वह चुनता है)

+1

क्या आपका मतलब ओवरराइड करना है? – MGZero

+2

नियम कई हैं ... और जटिल। यह सब सी ++ मानक –

+0

@MGZero के अनुभाग ** 3.4 ** में शामिल है - नहीं ... – Belgi

उत्तर

4

जैसा कि पहले से ही कहा गया है, नियम मानक में पूरी तरह वर्णित हैं। अंगूठे के मूल नियम के रूप में, संकलक अधिभार का चयन करेगा जिसके लिए कम से कम स्वचालित रूपांतरण की आवश्यकता होती है, यह चेतावनी के साथ कि यह 2 उपयोगकर्ता परिभाषित रूपांतरणों को कभी लागू नहीं करेगा।

इंटीजर प्रकार स्वचालित रूप से बहुत सारे होते हैं। तो यदि आपके पास int और double पर ओवरलोड किया गया है, तो संकलन int फ़ंक्शन को एक पूर्णांक के साथ बुलाए जाने पर फ़ंक्शन करेगा। यदि आपके पास int संस्करण नहीं था, तो संकलक double एक का चयन करेगा। और विभिन्न पूर्णांक प्रकारों के बीच, कंपाइलर पूर्णांक स्थिरांक के लिए int पसंद करता है, क्योंकि यह उनका प्रकार है। यदि आप short और unsigned short पर अधिभारित हैं, लेकिन 5 के निरंतर के साथ बुलाया गया है, तो संकलक शिकायत करेगा कि यह पता लगाने के लिए कि कौन से अधिभार का उपयोग नहीं किया जा सकता है।

स्कॉट मेयर्स की पुस्तक में वास्तव में सबसे अच्छा स्पष्टीकरण है जो मैंने कभी पढ़ा है।

+0

"स्कॉट मेयर्स" पुस्तक पर डाला गया है। क्या आप किताब के शीर्षक का नामकरण करके अधिक विशिष्ट हो सकते हैं? –

+0

मेरे जीवन के लिए, अब मुझे यह नहीं मिल रहा है। संदर्भ के साथ किसी को +1? – drdwilcox

+0

स्कॉट मेयर्स की किताबें: http://www.aristeia.com/books.html; संदर्भ शायद प्रभावी सी ++ या संभवतः अधिक प्रभावी सी ++ के लिए है। – pnkfelix

0

पूरे फ़ंक्शन नाम में फ़ंक्शन के साथ-साथ पैरामीटर सूची भी शामिल होती है। तो, तार्किक रूप से, 2 कार्यों को एक ही चीज़ कहा जाता है लेकिन विभिन्न पैरामीटर सूचियों के साथ दोनों अलग-अलग "पूर्ण नाम" होते हैं। मेरी शब्दावली शायद थोड़ा सा है, इसलिए यदि कोई इसे सही करना चाहता है, तो नि: शुल्क महसूस करें।

+1

कहता है कि आपने कुछ किया है (int x) और doSomething (लघु x), जो संकलक चुनता है जब आप कॉल करते हैं कुछ (5)? – Tom

+0

अहह, यह और अधिक रोचक बनाता है! अच्छा सवाल, और मेरे ज्ञान के दायरे से भी परे। मुझे लगता है कि यह इस बात पर निर्भर करेगा कि संकलक 5 को क्या मानता है। मैं int कहने के इच्छुक हूं, लेकिन मैं बिल्कुल निश्चित नहीं हूं। – MGZero

+1

यह 'int' संस्करण का चयन करेगा। – drdwilcox

0

यह तर्क (ओं) के प्रकार पर आधारित है। यदि कोई प्रकार मेल नहीं खाता है तो कोई कास्टिंग शामिल नहीं है, बस संकलित नहीं होगा।

+0

एमजीजेरो के पोस्ट – Tom

+0

पर मेरी टिप्पणी देखें, यदि मुझे पता है कि आपके पास शून्य एफ (डबल एक्स) है और आप एफ (5) को कॉमाइल कहते हैं और 5 को 5.0 – Belgi

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