क्या कोई समझा सकता है कि ओवरलोडिंग रिज़ॉल्यूशन एक अस्पष्ट त्रुटि की रिपोर्ट करने के बजाय दूसरा फ़ंक्शन क्यों लेगा। वैसे भी, दूसरा कार्य एक सटीक मैच है, लेकिन पहले एक योग्यता रूपांतरण (char * से const char * तक) से गुजरता है। हालांकि, http://en.cppreference.com/w/cpp/language/overload_resolution
का दस्तावेज़ बताता है कि योग्यता रूपांतरण भी एक सटीक मिलान है, और इसलिए दोनों उम्मीदवारों के पास समान रैंकिंग होना चाहिए।सी ++ फ़ंक्शन ओवरलोडिंग सटीक मिलान
1) सटीक मिलान::
मानक रूपांतरण अनुक्रम के प्रत्येक प्रकार के तीन पंक्तियां एक असाइन किया गया है कि कोई भी रूपांतरण की आवश्यकता है, lvalue करने वाली rvalue रूपांतरण, योग्यता रूपांतरण, समारोह सूचक रूपांतरण, (के बाद से सी + +17) उपयोगकर्ता परिभाषित एक ही कक्षा
2) संवर्धन करने के लिए वर्ग प्रकार के रूपांतरण: अभिन्न पदोन्नति, फ्लोटिंग प्वाइंट पदोन्नति
3) रूपांतरण: अभिन्न रूपांतरण, फ्लोटिंग प्वाइंट रूपांतरण, चल अभिन्न रूपांतरण, सूचक रूपांतरण, पॉइंटर-टू-मेम्ब एर रूपांतरण, बूलियन रूपांतरण, एक व्युत्पन्न वर्ग के उपयोगकर्ता परिभाषित रूपांतरण इसके आधार
void g(const char* x)
{
std::cout << "g(const char* x)" << std::endl;
}
void g(char* x)
{
std::cout << "g(char* x)" << std::endl;
}
void callg()
{
char a[] = "sample";
g(a);
}
मैं समझने में सक्षम नहीं था "आप यह कहने में सही हैं कि दोनों एक सटीक मैच हैं" कैसे? –
@GilsonPJ आवश्यक रूपांतरणों (सरणी से पॉइंटर और योग्यता) के रैंक सटीक मिलान हैं, इसलिए समग्र रूपांतरण अनुक्रम भी सटीक मिलान हैं। – user657267
@ गिल्सन: असल में, दोनों सटीक मिलान हैं और एक ही रैंक है ... लेकिन सीवी-योग्यता के संबंध में विशेष नियम ट्रम्प करता है और # 2 प्राथमिकता देता है। संक्षेप में: ** यह सिर्फ ** है। –