निम्नलिखित पर विचार करें अधिक स्थिरांक संदर्भ लेती है:खाका स्थिरांक सूचक
template <class T> void Foo(const T* x) {
std::cout << "I am the pointer overload" << std::endl;
}
template <class T> void Foo(const T& x) {
std::cout << "I am the reference overload" << std::endl;
}
ऊपर देखते हुए, मैं निम्नलिखित कॉल करने के लिए सूचक अधिभार उम्मीद करेंगे:
int* x;
Foo(x);
लेकिन ऐसा नहीं है। ऐसा लगता है कि const T*
के रूप में मुझे अजीब लगता है कि एक गैर-कॉन्स T
के साथ-साथ const T&
भी स्पष्ट रूप से बाध्य हो सकता है लेकिन पॉइंटर संस्करण "बेहतर फिट" जैसा प्रतीत होता है।
मेरे आवेदन के लिए मैं पॉइंटर संस्करण कहलाता हूं। मैं एक अतिरिक्त विशेषज्ञता के माध्यम से यह काम कर सकता हूं:
template <class T> void Foo(T* x) {
const T* const_x = x;
Foo(const_x);
}
लेकिन यह गलत और अनावश्यक लगता है। क्या कोई बेहतर तरीका है? मैं समझ नहीं पा रहा हूं (मानक के अनुभाग x.y.z के अलावा यह कहता है कि यह इस तरह है)?
"लेकिन सूचक संस्करण की तरह लगता है एक" बेहतर फिट "" - 'क्यों स्थिरांक पूर्णांक *' एक की तरह लग 'int * const 'से बेहतर फिट? – hvd
यदि आप फ़ंक्शन प्रिंट 'x' रखने का प्रयास करते हैं तो आप कम उलझन में होते। – StoryTeller
बस टेम्पलेट शून्य फू (कॉन्स टी एंड एक्स) { std :: cout << "मैं संदर्भ अधिभार हूं" << std :: endl; } यह हमेशा पॉइंटर संस्करण को कॉल करेगा :) –