ホームページ > バックエンド開発 > C++ > C で静的関数と非静的関数をオーバーロードできないのはなぜですか?

C で静的関数と非静的関数をオーバーロードできないのはなぜですか?

Susan Sarandon
リリース: 2024-10-27 14:16:01
オリジナル
471 人が閲覧しました

Why Can't You Overload Static and Non-Static Functions in C  ?

C での静的関数と非静的関数のオーバーロード

C では、同じ名前の静的関数と非静的関数をオーバーロードすることはできません。許可されています。これは C 標準で明示的に規定されており、戻り値の型のみが異なる関数、または関数の 1 つが静的である場合に名前とパラメーターの型が同じである関数のオーバーロードを禁止しています。

次のクラスを考えてみましょう:

<code class="cpp">class Foo {
    string bla;
    Foo() { bla = "nonstatic"; }

    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>
ログイン後にコピー

このクラス定義はもっともらしいように思えますが、C 標準によれば無効です。静的関数はオブジェクト メンバー アクセス (.) 構文を使用して呼び出すこともできるため、静的関数と非静的関数のオーバーロードはあいまいさにつながるため禁止されています。

たとえば、次のコード スニペットでは:

<code class="cpp">Foo f;
f.print();</code>
ログイン後にコピー

静的印刷関数と非静的印刷関数のどちらを呼び出す必要があるかは不明です。

さらに、C には、関数が静的に呼び出されているかどうかを判断する方法がありません。 PHP のように。関数が呼び出されるオブジェクトを指す this キーワードは、常に null 以外になります。

要約

静的関数と非静的関数のオーバーロードC では同じ名前を持つことは許可されません。さらに、関数本体内で静的関数呼び出しと非静的関数呼び出しを区別するメカニズムはありません。

以上がC で静的関数と非静的関数をオーバーロードできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート