Edit
Sebagai MM berkomentar, pada parameter di prototipe tersebut const
diabaikan. Sumber yang diedit dari jawaban asli (lihat di bawah) menunjukkan ini:
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;
}
Tidak ada pesan kesalahan.
Ngomong-ngomong, aku akan membiarkan yang asli tetap di tempat dengan harapan itu bisa membantu.
Asli
Pada const
parameter membuat parameter ini read-only di dalam fungsi.
Sebagai contoh:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Sumber ini tidak akan dikompilasi tanpa pesan kesalahan.
Fungsinya correct()
akan membaca nilai yang diberikan, mengubah tandanya, dan mengembalikan nilai yang dinegasikan.
Fungsi erroneous()
tampaknya melakukan hal yang sama secara efektif, kecuali bahwa ada tugas untuk parameter. Tetapi sebagai parameterconst
ini tidak diperbolehkan.
Selanjutnya, fungsinya changer()
akan berfungsi seperti keduanya sebelumnya, tetapi tidak memberikan kesalahan.
Mari kita lihat situs panggilan:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
Variabel yang f
diberikan sebagai argumen akan disalin ke dalam parameter value
. Itu tidak akan pernah berubah bahkan jikachanger()
akan dipanggil.
Anda mungkin ingin melihat parameter sebagai semacam variabel lokal. Sebenarnya mereka sebagian besar ditangani seperti ini dalam kode mesin yang dihasilkan.
Jadi, mengapa const
terkadang Anda melihat ? Anda melihatnya jika pointer didefinisikan sebagai parameter.
Saat Anda tidak ingin nilai yang ditunjukkan diubah, Anda perlu menambahkan const
; tetapi lakukan pada posisi yang benar!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
di sini berlebihan, apa yang Anda bayangkan sedang terjadi?