Düzenle
MM yorumladığı gibi, parametrelere prototipconst göz ardı edilir. Orijinal yanıtın düzenlenmiş kaynağı (aşağıya bakın) şunu gösterir:
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;
}
Hata mesajı yok.
Her neyse, yardımcı olabileceği umuduyla orijinali yerinde bırakacağım.
orijinal
constBir parametre bu hale parametreyi salt okunur işlevi içinde.
Örneğin:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Bu kaynak hata mesajı olmadan derlenmeyecektir.
İşlev correct()verilen değeri okuyacak, işaretini değiştirecek ve reddedilen değeri döndürecektir.
Fonksiyon erroneous(), parametreye bir atama olması dışında, etkili bir şekilde aynısını yapıyor gibi görünmektedir. Ancak parametre olduğu constiçin buna izin verilmez.
Daha sonra, işlev changer()daha önce her ikisi gibi çalışır, ancak hata vermez.
Çağrı sitesine bakalım:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
Bağımsız değişken olarak fverilen değişken parametreye kopyalanırvalue . Aranacak olsa bile asla değişmeyecek changer().
Parametrelere bir tür yerel değişken olarak bakmak isteyebilirsiniz. Aslında üretilen makine kodunda çoğunlukla bu şekilde kullanılırlar.
Peki, neden constbazen görüyorsun ? Bir işaretçi parametre olarak tanımlanmışsa görürsünüz .
İstemediğiniz zaman değeri işaret , eklemek gerekmez değiştirilmesi const; ama doğru pozisyonda yapın!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
constburada gereksiz, ne düşünüyorsun?