पर पॉइंटर लेने वाले फ़ंक्शन पर टेम्पलेट फ़ंक्शन पर जाता है। निम्नलिखित कोड g ++ 4.1.2 और g ++ 4.4.4 पर संकलित किया गया था। दोनों टिप्पणियों में दिए गए परिणाम देते हैं।एक गैर-कॉन्स्ट पॉइंटर वाला फ़ंक्शन कॉल करना
int f(const int * a)
{
return 0;
}
template<typename A>
int f(A a)
{
return 1;
}
int main()
{
int x;
// return f(&x); // returns 1
return f((const int *)&x); // returns 0
}
यह f(int *)
की एक कॉल करने के लिए नीचे उबालने के लिए प्रकट होता है f<int *>(int *)
बजाय उम्मीद f(const int *)
को हल करता है। मुझे यह चौंकाने वाला और पूरी तरह से अनजान मिला।
क्या यह जी ++ में एक बग है, सी ++ का एक अंधेरा कोने, या किसी कारण से स्पष्ट है कि मुझे याद आ रही है? यदि यह एक बग नहीं है, तो इसके पीछे सिद्धांत या तर्क क्या है? क्या इस मुद्दे के बारे में कोई सुरक्षित प्रथा है?
'एफ (इंट)' और 'एफ (कॉन्स इंट)' समान प्रोटोटाइप हैं जहां तक एएनएसआई सी ++ कंपाइलर – sehe
से संबंधित है, लेकिन 'एफ (int *)' 'f (const int) जैसा नहीं है)/एफ (int const *) ' – Roland
शायद। लिंक: http://stackoverflow.com/questions/2121525/const-pointers-in-overload-resolution/2121616#2121616 – sehe