संपादित करें
के रूप में एम एम टिप्पणी की, में मानकों पर प्रोटोटाइपconst नजरअंदाज कर दिया है। मूल उत्तर का संपादित स्रोत (नीचे देखें) यह दिखाता है:
float correct(float const value);
float erroneous(float const value);
float changer(float value);
float correct(float value) {
return -value;
}
float erroneous(float value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
कोई त्रुटि संदेश नहीं है।
वैसे भी, मैं मूल में जगह छोड़ दूँगा आशा है कि यह मदद कर सकता है।
मूल
constएक पैरामीटर पर इस बनाता पैरामीटर केवल पढ़ने के लिए समारोह के अंदर।
उदाहरण के लिए:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
यह स्रोत त्रुटि संदेश के बिना संकलन नहीं करेगा।
फ़ंक्शन correct()दिए गए मान को पढ़ेगा, उसके संकेत को बदल देगा, और नकारात्मक मान लौटाएगा।
फ़ंक्शन erroneous()प्रभावी रूप से वही करता है, सिवाय इसके कि पैरामीटर में एक असाइनमेंट है। लेकिन पैरामीटर के रूप में constयह अनुमति नहीं है।
अगला, फ़ंक्शन changer()पहले दोनों के रूप में काम करेगा, लेकिन यह कोई त्रुटि नहीं देता है।
आइए कॉल साइट को देखें:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
fएक तर्क के रूप में दिए गए चर को पैरामीटर में कॉपी किया जाएगा value। changer()कहा जाएगा तो भी यह कभी नहीं बदलेगा ।
आप कुछ प्रकार के स्थानीय चर के रूप में मापदंडों को देखना पसंद कर सकते हैं। दरअसल वे जनरेट मशीन कोड में ज्यादातर इस तरह से संभाले जाते हैं।
तो, आप constकभी-कभी क्यों देखते हैं ? आप इसे देखते हैं कि कोई पॉइंटर पैरामीटर के रूप में परिभाषित किया गया है।
आप करते हैं नहीं करना चाहता मूल्य की ओर इशारा किया परिवर्तित करने की है, तो आप जोड़ने की जरूरत है const; लेकिन इसे सही स्थिति में करें!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
constयहाँ बेमानी है, आप क्या कल्पना करते हैं?