modificare
Come ha commentato MM, sui parametri di prototipi del const
viene ignorato. La fonte modificata della risposta originale (vedi sotto) mostra questo:
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;
}
Non c'è nessun messaggio di errore.
Ad ogni modo, lascerò l'originale sul posto nella speranza che possa essere d'aiuto.
Originale
Il const
parametro at rende questo parametro di sola lettura all'interno della funzione.
Per esempio:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Questa fonte non verrà compilata senza un messaggio di errore.
La funzione correct()
leggerà il valore dato, cambierà il suo segno e restituirà il valore negato.
La funzione erroneous()
sembra fare esattamente lo stesso, tranne per il fatto che è presente un'assegnazione al parametro. Ma poiché il parametro è const
questo non è permesso.
Successivamente, la funzione changer()
funzionerà come entrambe prima, ma non fornisce errori.
Diamo un'occhiata al sito di chiamata:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
La variabile f
fornita come argomento verrà copiata nel parametro value
. Non cambierà mai anche se changer()
verrà chiamato.
Potresti considerare i parametri come una sorta di variabili locali. In realtà sono per lo più gestiti in questo modo nel codice macchina generato.
Quindi, perché vedi const
qualche volta? Lo vedi se un puntatore è definito come parametro.
Quando non si desidera che il valore indicato venga modificato, è necessario aggiungere const
; ma fallo nella posizione corretta!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
è ridondante qui, cosa stai succedendo?