निम्नलिखित ठीक
void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1, int c = 0);
है और निम्नलिखित भी
function(); // calls first function
ठीक है लेकिन निम्नलिखित अस्पष्ट
function(1); // second and first match equally well
अधिभार संकल्प (प्रक्रिया है कि क्या कहता है के लिए है कॉल करने के लिए फ़ंक्शन), पैरामीटर जो स्पष्ट तर्क पारित नहीं किए हैं और जो defau का उपयोग करते हैं लेफ्टिनेंट तर्कों को नजरअंदाज कर दिया जाता है। तो कंपाइलर वास्तव में उपरोक्त कॉल के लिए एक int पैरामीटर रखने वाले दो कार्यों को देखता है और निर्णय नहीं ले सकता है।
निम्नलिखित हालांकि
void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1);
जबकि अपने प्रश्न में कोड के लिए आप दो कार्यों की घोषणा (क्योंकि दोनों घोषणाओं मानकों के विभिन्न संख्या है), इस उदाहरण में आप केवल एक घोषित बीमार का गठन है फ़ंक्शन। लेकिन इसकी दूसरी घोषणा पैरामीटर के लिए एक डिफ़ॉल्ट तर्क दोहराती है (और यहां तक कि एक अलग मूल्य के साथ, लेकिन इससे कोई फर्क नहीं पड़ता)। इसकी अनुमति नहीं है। ध्यान दें कि निम्नलिखित ठीक
void function(int a, float b = 3.1);
void function(int a = 0, float b);
डिफ़ॉल्ट तर्कों के सेट है कि एक ही समारोह के लिए एक ही दायरे में दिखाई विलय कर रहे हैं, और केवल कि एक ही दायरे में दिखाई देते हैं उन लोगों के लिए घोषणाओं के लिए है। तो निम्नलिखित मान्य
void function(int a = 0, float b = 3.1);
void function1() {
void function(int a, float b = 1.1);
function(0);
}
है यह b
के लिए पारित किया 1.1
साथ समारोह कहता है।
स्रोत
2010-10-04 19:21:58
आपके कार्यों में अलग-अलग पहचानकर्ता हैं। कोई अस्पष्टता नहीं है। क्या आप उन्हें 'फ़ंक्शन' दोनों नाम देने का मतलब रखते थे? – JoshD
@ जोश डी: असंभव। पहले में 2 पैरामीटर हैं, दूसरा - 3. – AnT
@ एंड्रे: प्रश्न तब तक कोई समझ नहीं आता जब तक कि * अस्पष्टता न हो, इसलिए जोश की टिप्पणी apropos है। – dmckee