La const de niveau supérieur n'affecte pas la signature de la fonction
En C, la liste des paramètres d'une fonction détermine la signature de la fonction, que les paramètres soient ou non sont déclarés avec const de niveau supérieur. Cela signifie que deux fonctions avec les mêmes types de paramètres, mais des qualificatifs const différents, auront la même signature de fonction.
int f(int); // can modify parameter int f(const int); // cannot modify parameter
Ce comportement peut sembler contre-intuitif, car le qualificatif const devrait logiquement affecter la façon dont la fonction peut se mettre à jour. ses paramètres. Cependant, c'est le point de vue de l'appelant qui compte :
Par conséquent, du point de vue de l'appelant, la signature de la fonction est la même quel que soit le qualificatif const sur le paramètre. Pour fournir différentes fonctionnalités, une forme de surcharge appropriée doit être utilisée, telle que :
void f(const int&); // pass by const reference void f(int&); // pass by non-const reference
Dans certains scénarios, il peut être souhaitable de créer une copie du paramètre pour préserver la constance. Ceci peut être réalisé en transmettant le paramètre par valeur :
T f(const F&); // pass by const reference T& f(F&); // pass by non-const reference
Cependant, la création d'une copie du paramètre peut introduire une surcharge de performances ou des références mémoire non valides si l'appelant avait l'intention de transmettre un objet temporaire. Par conséquent, C ne crée pas automatiquement de copies pour les paramètres const de niveau supérieur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!