แก้ไข
ในฐานะที่เป็น MM แสดงความคิดเห็นกับพารามิเตอร์ในต้นแบบที่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ซ้ำซ้อนที่นี่คุณคิดว่าเกิดอะไรขึ้น