Maison > développement back-end > C++ > le corps du texte

Pourquoi les fonctions statiques ne peuvent-elles pas être surchargées avec des fonctions non statiques en C ?

Mary-Kate Olsen
Libérer: 2024-10-27 11:12:30
original
739 Les gens l'ont consulté

Why Can't Static Functions Be Overloaded with Non-Static Functions in C  ?

Impossible de surcharger les fonctions statiques avec des fonctions non statiques en C

Alors que de nombreux langages de programmation permettent de surcharger des fonctions basées sur des méthodes statiques ou d'instance , C interdit explicitement ce comportement. La norme C 13.1/2 stipule que les fonctions membres portant le même nom et les mêmes types de paramètres ne peuvent pas être surchargées si l'une d'entre elles est statique.

<code class="cpp">class X {
    static void f();
    void f();
};</code>
Copier après la connexion

Dans l'exemple ci-dessus, les deux déclarations de f() sont considérées mal formé par la norme.

Ambiguïté dans l'appel de fonctions statiques sur des instances

Même si la surcharge de fonctions était autorisée dans ce scénario, il y aurait toujours une ambiguïté lors de l'appel d'un fonction statique sur une instance. La norme C 9.4/2 permet aux membres statiques d'être appelés en utilisant à la fois l'identifiant qualifié (par exemple, X::f()) et la syntaxe d'accès aux membres de classe (par exemple, g().reschedule()). Ainsi, dans le code suivant, il n'est pas clair si la fonction print() statique ou non statique doit être appelée :

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

Foo f;
f.print(); // Ambiguous: static or non-static?</code>
Copier après la connexion

Vérifier si une fonction est appelée statiquement

Contrairement à PHP, où vous pouvez vérifier si la variable this est définie pour déterminer si une fonction est appelée de manière statique, C ne fournit pas cette fonctionnalité. Le mot-clé this pointe toujours vers un objet et n'est jamais NULL, vous ne pouvez donc pas l'utiliser pour faire la distinction 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!