Maison >développement back-end >C++ >La signature de fonction C inclut-elle le type de retour ?

La signature de fonction C inclut-elle le type de retour ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-04 05:02:10700parcourir

Does C   Function Signature Include the Return Type?

Le type de retour influence-t-il la signature de la fonction ?

En C , les fonctions déclarées sans modèles de fonction excluent leur type de retour dans leurs signatures. La surcharge des fonctions uniquement basées sur des types de retour différents est interdite.

Explication détaillée

La relation entre les fonctions, leurs déclarations et leurs signatures est complexe.

Déclaration et entité

Une déclaration de fonction peut déclarer une entité de fonction ou un modèle entité. Les fonctions ordinaires et les spécialisations explicites des modèles de fonctions appartiennent à la première catégorie. Les modèles de fonctions primaires ou les spécialisations explicites avec des arguments non spécifiés entrent dans cette dernière catégorie.

Définition de la signature

Selon la norme C (1.3.10), la signature de fonction englobe les éléments suivants :

  • Types de paramètres
  • Pour les membres de la classe, qualificatifs cv sur la fonction et la classe contenant

Cependant, cette définition ne mentionne pas le type de retour.

Modèles de fonction et types de retour

À l'inverse, la signature d'une spécialisation de modèle de fonction inclut à la fois la signature de la fonction et le type de retour (14.5.5.1).

Alors, qu'est-ce qui constitue exactement une signature ?

Pour les fonctions non-modèles, la signature exclut le type de retour. Cependant, pour les spécialisations de modèles, le type de retour est incorporé.

Implication en matière de surcharge

La norme interdit la surcharge basée uniquement sur des types de retour différents. Cependant, cela reste ambigu quant à ce qui constitue une telle distinction.

Comportement du compilateur

Les principaux compilateurs rejettent le code suivant en raison de types incompatibles :

int f();
double f(); // invalid

Cependant, ils accepter :

template<typename T> int f();
template<typename T> double f(); // invalid?

Conclusion

Le type de retour, bien qu'il ne fasse pas partie de la signature des fonctions non-modèles, est crucial pour déterminer la compatibilité des types de fonctions. Comprendre ces nuances est essentiel pour une programmation C efficace.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn