लगभग सभी अन्य उत्तर सही हैं, लेकिन वे इसके एक पहलू को याद करते हैं: जब आप const
किसी फ़ंक्शन घोषणा में एक पैरामीटर पर अतिरिक्त का उपयोग करते हैं , तो कंपाइलर अनिवार्य रूप से इसे अनदेखा करेगा। एक पल के लिए, आइए एक संकेतक होने के नाते अपने उदाहरण की जटिलता को अनदेखा करें और बस एक का उपयोग करें int
।
void foo(const int x);
के रूप में एक ही कार्य घोषित करता है
void foo(int x);
केवल फ़ंक्शन की परिभाषा में अतिरिक्त const
सार्थक है:
void foo(const int x) {
// do something with x here, but you cannot change it
}
यह परिभाषा उपरोक्त घोषणाओं में से एक है। फोन करने वाले की परवाह नहीं x
हैconst
--that एक कार्यान्वयन विस्तार है कि कॉल स्थल पर प्रासंगिक नहीं है।
यदि आपके पास डेटा के const
लिए एक पॉइंटर है const
, तो वही नियम लागू होते हैं:
// these declarations are equivalent
void print_string(const char * const the_string);
void print_string(const char * the_string);
// In this definition, you cannot change the value of the pointer within the
// body of the function. It's essentially a const local variable.
void print_string(const char * const the_string) {
cout << the_string << endl;
the_string = nullptr; // COMPILER ERROR HERE
}
// In this definition, you can change the value of the pointer (but you
// still can't change the data it's pointed to). And even if you change
// the_string, that has no effect outside this function.
void print_string(const char * the_string) {
cout << the_string << endl;
the_string = nullptr; // OK, but not observable outside this func
}
कुछ सी ++ प्रोग्रामर मापदंडों को बनाने के लिए परेशान करते हैं const
, तब भी जब वे हो सकते हैं, भले ही वे पैरामीटर संकेत हों।