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

C で静的関数と非静的関数をオーバーロードできますか?

Linda Hamilton
リリース: 2024-10-28 18:58:30
オリジナル
561 人が閲覧しました

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

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

C では、静的関数を非静的関数でオーバーロードすることはできません。 C 標準で明示的に禁止されているため、この関数は使用できません。これは ISO 14882:2003 C 標準 13.1/2 で規定されており、同じ名前とパラメーター型を持つメンバー関数宣言のいずれかが静的メンバー関数宣言である場合、それらの宣言はオーバーロードできないと規定されています。

曖昧さ静的関数呼び出しを使用

さらに、C ではインスタンス上で静的関数を呼び出すことができます。 ISO 14882:2003 C 標準 9.4/2 に従って、クラス X の静的メンバー s は、修飾 ID 式 X::s を使用して参照できます。これは、クラス メンバー アクセス構文を使用してクラス メンバーにアクセスすることは必須ではないことを意味します。 static member.

これにより、インスタンスで静的関数を呼び出すときにあいまいさが生じます。次の例を考えてみましょう。

<code class="cpp">class Foo {
public:
    string bla;
    Foo() { bla = "nonstatic"; }
    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>
ログイン後にコピー

この例では、静的 print() 関数を呼び出すか非静的 print() 関数を呼び出すかが不明瞭であるため、f.print() の呼び出しがあいまいになります。 C 標準では、この構文を使用して静的メンバー関数を呼び出すことができますが、同じ名前の非静的関数が存在するため、あいまいさが生じます。

静的関数呼び出しの確認

PHP とは対照的に、C には関数が静的に呼び出されているかどうかを直接確認する方法がありません。関数が呼び出されたオブジェクトを指す this キーワードは常にオブジェクトを指すため、関数が静的に呼び出されたかどうかを判断することができなくなります。

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

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