คำตอบอื่น ๆ เกือบทั้งหมดถูกต้อง แต่พลาดแง่มุมหนึ่ง: เมื่อคุณใช้ส่วนเกิน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
รายละเอียดการใช้งานที่ไม่เกี่ยวข้องในไซต์การโทร
หากคุณมี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
}
โปรแกรมเมอร์ C ++ เพียงไม่กี่คนที่ต้องการสร้างพารามิเตอร์const
แม้ว่าจะเป็นไปได้ก็ตามไม่ว่าพารามิเตอร์เหล่านั้นจะเป็นตัวชี้หรือไม่ก็ตาม