Maison  >  Article  >  développement back-end  >  Les fonctions statiques peuvent-elles être surchargées avec des fonctions non statiques en C ?

Les fonctions statiques peuvent-elles être surchargées avec des fonctions non statiques en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 03:39:02174parcourir

Can Static Functions Be Overloaded with Non-Static Functions in C  ?

Surcharge de fonctions statiques avec des fonctions non statiques en C

Contexte :

Surcharge de fonctions avec différents types de retour n'est pas pris en charge en C , et il en va de même lorsque vous tentez de surcharger une fonction statique avec une fonction non statique. Ce scénario a été illustré dans la définition de classe fournie, mais il a généré une erreur.

Interdiction standard :

Ce comportement est explicitement interdit par la norme C (ISO 14882 : 2003, Section 13.1/2) :

  • La surcharge n'est pas autorisée pour les fonctions qui diffèrent uniquement par le type de retour.
  • Les déclarations de fonctions membres portant le même nom et les mêmes types de paramètres ne peuvent pas être surchargées si any est une déclaration de fonction membre statique.

Considérations relatives à l'ambiguïté :

Même si la surcharge était autorisée, elle introduirait une ambiguïté car :

  • Les fonctions statiques peuvent être appelées sur les instances selon la norme C (ISO 14882:2003, Section 9.4/2).

Par exemple :

<code class="cpp">class Foo {
public:
    static void print() { cout << "static" << endl; }
};

Foo f;
f.print(); // Ambiguous: static or non-static call?</code>

Approche alternative :

Étant donné qu'il n'est pas possible de déterminer si une fonction est appelée de manière statique ou non en C , des méthodes alternatives peuvent être utilisées pour obtenir la fonctionnalité souhaitée :

  • Utiliser le préprocesseur pour définir des macros capables de distinguer les appels statiques et non statiques.
  • Créez des fonctions distinctes avec noms différents pour les comportements statiques et non statiques.
  • Utilisez des instructions conditionnelles en fonction de la présence ou de l'absence d'un objet (par exemple, en vérifiant la valeur de celui-ci). Cependant, cette méthode ne peut pas faire la différence entre les appels statiques et les appels d'instance.

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