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

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

Mary-Kate Olsen
リリース: 2024-10-26 03:39:02
オリジナル
254 人が閲覧しました

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

C の非静的関数による静的関数のオーバーロード

コンテキスト:

関数のオーバーロード異なる戻り値の型を持つ関数は C ではサポートされていません。また、静的関数を非静的関数でオーバーロードしようとするときにも同じことが当てはまります。このシナリオは、提供されたクラス定義で示されていますが、エラーが発生しました。

標準禁止:

この動作は、C 標準 (ISO 14882: 2003、セクション 13.1/2):

  • 戻り値の型のみが異なる関数のオーバーロードは許可されません。
  • 同じ名前とパラメーターの型を持つメンバー関数宣言は、次の場合にオーバーロードできません。 any は静的メンバー関数の宣言です。

曖昧さに関する考慮事項:

たとえオーバーロードが許可されていたとしても、次の理由によりあいまいさが生じます。

  • 静的関数は、C 標準 (ISO 14882:2003、セクション 9.4/2) に従ってインスタンス上で呼び出すことができます。

例:

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

Foo f;
f.print(); // Ambiguous: static or non-static call?</code>
ログイン後にコピー

代替アプローチ:

C では関数が静的に呼び出されているかどうかを判断することができないため、代替メソッドを使用して目的の機能を実現できます。

  • 使用プリプロセッサは、静的呼び出しと非静的呼び出しを区別できるマクロを定義します。
  • 静的動作と非静的動作に対して、異なる名前を持つ個別の関数を作成します。
  • オブジェクトの有無に基づいて、条件文を使用します (例: this の値を確認します)。ただし、このメソッドでは静的呼び出しとインスタンス呼び出しを区別できません。

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

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