แก้ไข
ในฐานะที่เป็น 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
ซ้ำซ้อนที่นี่คุณคิดว่าเกิดอะไรขึ้น