एक उदाहरण के लिए बुरा विकल्प इसके अलावा (शायद समझ में नहीं बल्कि toString
से int x = to<int>("1235")
वाला राज्य बन गया), समस्या यह है कि वापसी प्रकार अधिभार संकल्प या प्रकार निष्कर्ष में भाग नहीं लेता है [1]। इस का कारण यह है कि अभिव्यक्ति कई स्थानों में इस्तेमाल किया जा सकता है, जहां वापसी के प्रकार निष्कर्ष निकाला नहीं किया जा सकता है:
// assuming template <typename T> T to(std::string):
//
f(to("123")); // where there are two overloads f(int), f(double)
int x = 1.5 * to("123"); // T == int? T == double?
to("123"); // now what? returned object can be ignored!
तो निर्णय है कि वापसी प्रकार अधिभार संकल्प या प्रकार कटौती में भाग नहीं लेंगे।
[1] नहीं है इस नियम है, जो एक से अधिक अधिभार, जहां अधिभार या तो गंतव्य सूचक या एक स्पष्ट कलाकारों द्वारा चयन किया जाना चाहिए के साथ एक समारोह सूचक के मूल्यांकन है के लिए एक एकल अपवाद है, लेकिन इस केवल एक अपवाद है और किसी अन्य संदर्भ में इसका उपयोग नहीं किया जाता है:
void f();
void f(int);
void g(void (*)());
void g(void (*)(int));
void (*p1)() = &f; // overload selected based on destination type
void (*p2)(int) = &f;
g((void (*)(int))&f); // overload selected based on explicit cast
स्रोत
2011-11-17 10:46:05
कुछ है कि एक पूर्णांक "toString" कहा जाता है में बदल सकते हैं क्यों है? –
[यह सवाल] (http: // stackoverflow।कॉम/प्रश्न/442026/फ़ंक्शन-ओवरलोडिंग-बाय-रिटर्न-टाइप) एक समान समस्या पर चर्चा करता है। –
यह "बस नहीं करता"। ध्यान दें कि यह भाषा है, संकलक नहीं - हालांकि वास्तव में यह आंशिक रूप से भाषा में निर्दिष्ट नहीं है क्योंकि यह सामान्य मामले में सही होने के लिए कंपाइलर के लिए मुश्किल हो सकता है। –