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 :
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!