संभव डुप्लिकेट:
Functions with const arguments and Overloadingओवरलोडिंग रिज़ॉल्यूशन के लिए प्रयुक्त फ़ंक्शन तर्कों में कॉन्स्ट क्वालीफायर क्यों हैं?
मैं बहुत अधिक भार और स्थिरांक घोषणा नियमों से उलझन में हूँ। यहां दो चीजें हैं जो मुझे पहेली करती हैं शायद आप मेरे सिर में गहरी गलतफहमी खोजने में मेरी मदद कर सकते हैं जिसके परिणामस्वरूप वे मुझे परेशान कर रहे हैं। ;)
सबसे पहले मुद्दा:
मेरे संकलक इस अनुमति देता है:
void f(int & x) {
std::cout << "plain f" << std::endl;
}
void f(const int & x) {
std::cout << "const f" << std::endl;
}
लेकिन निम्नलिखित एक संकलन त्रुटि (समारोह पहले से ही एक शरीर है) का कारण बनता है:
void f(int x) {
std::cout << "plain f" << std::endl;
}
void f(const int x) {
std::cout << "const f" << std::endl;
}
कौन सा मुझे लगता है समझ में आता है क्योंकि मैंने सोचा था कि कंस्ट्रल केवल कंपाइलर को बताने के लिए था कि वस्तु पारित की जा रही है और दूसरे मामले में इसे किसी भी तरह कॉपी नहीं किया गया है। लेकिन अगर यह सही है तो मैं कॉन्स्ट का उपयोग करके कार्यों को अधिभार क्यों कर सकता हूं?
दूसरे शब्दों में, क्यों करता है, तो मैं इस तरह संकलन संस्करण का उपयोग और कार्यों फोन:
int x1 = 5;
const int x2 = 5;
f(x1);
f(x2);
मैं मिलता है "सादे च" और "स्थिरांक च" "स्थिरांक च" दो बार के बजाय? जाहिर है, अब मैं कंपाइलर को बताने के लिए भी कॉन्स्ट का उपयोग कर रहा हूं जो कॉल करने के लिए काम करता है न केवल संदर्भ बदलता है। यह अधिक भ्रमित हो जाता है क्योंकि अगर मैं "सादा" संस्करण को हटा देता हूं तो यह ठीक काम करता है और "कॉन्स" संस्करण को दो बार कॉल करता है।
अब मेरा वास्तविक प्रश्न क्या है? मैं जानना चाहता हूं कि इस व्यवहार के पीछे क्या विचार हैं क्योंकि अन्यथा इसे याद रखना बहुत मुश्किल है।
फ़ंक्शन पैरामीटर पर शीर्ष स्तर 'const' qualifiers फ़ंक्शन के हस्ताक्षर को निर्धारित करते समय _removed_ हैं। 'शून्य एफ (int)' और 'शून्य एफ (कॉन्स int)' एक ही फ़ंक्शन का संदर्भ लें। ओवरलोड रिज़ॉल्यूशन के लिए शीर्ष स्तर 'const' का उपयोग नहीं किया जाता है। व्युत्पन्न प्रकार के नीचे 'const' आगे (जैसे कि 'const int' 'में) फ़ंक्शन पैरामीटर के प्रकार और इसलिए फ़ंक्शन हस्ताक्षर को प्रभावित करते हैं। –
यह भी देखें: http://stackoverflow.com/questions/4212932/defining-a- कार्यक्षमता-with- अलग-अलग हस्ताक्षर –
@ चार्ल्सबैली लिंक के लिए धन्यवाद। किसी तरह मुझे उनको नहीं मिला, क्षमा करें। – Sarien