Maison >développement back-end >C++ >La surcharge de la fonction C autorise-t-elle des différences uniquement dans le type de retour ?

La surcharge de la fonction C autorise-t-elle des différences uniquement dans le type de retour ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 19:21:15918parcourir

Does C   Function Overloading Allow Differences Only in Return Type?

Le type de retour est-il inclus dans la signature de la fonction et permet-il la surcharge avec uniquement des modifications du type de retour ?

En C , il y a une distinction entre les déclarations de fonction et les entités de fonction. Les déclarations peuvent établir des entités de fonction ou des entités modèles. Pour les déclarations de fonctions non-modèles, la signature englobe les types d'arguments, les informations d'appartenance à la classe (le cas échéant) et les qualificatifs. Cependant, pour les spécialisations de modèles de fonctions, la signature englobe également le type de retour.

Signature de fonction pour les spécialisations de fonctions

La norme C stipule que pour les spécialisations de modèles de fonctions, la signature implique le type de retour, comme souligné dans la section 14.5.5.1. Cela englobe la signature du modèle et les arguments du modèle fournis. Ceci est conforme à la compréhension selon laquelle le type de retour contribue au type d'une fonction.

Surcharge avec des types de retour différenciés

Selon la norme, les déclarations de fonction avec différents types de retour sont considérés comme distincts en termes de surcharge (section 13.1). Cependant, la définition de « diffère uniquement par le type de retour » reste non spécifiée dans le langage.

Comportement du compilateur

Actuellement, les principaux compilateurs rejettent les déclarations de fonction avec des signatures identiques mais différentes types de retour (par exemple, "int f();", "double f();"). Cependant, ce comportement n'est pas nécessairement exigé par la norme.

Proposition préliminaire C 0x

Les spécifications provisoires C 0x récentes fournissent une définition plus complète de la « signature » ​​dans section 1.3.11, incluant explicitement le type de retour pour les entités de fonction et les spécialisations de modèles. Cela coïncide avec l'affirmation selon laquelle le type de retour fait partie intégrante du type de la fonction.

Par conséquent, en résumé :

  • Les spécialisations de fonctions incluent le type de retour dans leurs signatures.
  • Les fonctions non-modèles n'ont pas le type de retour dans leurs signatures.
  • La surcharge avec uniquement les différences de type de retour est interdite en fonction sur la norme, bien que l'interprétation exacte de cette condition puisse varier selon les compilateurs et les versions linguistiques.

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