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

Susan Sarandon
リリース: 2024-10-27 11:32:02
オリジナル
471 人が閲覧しました

Can You Overload Static and Non-Static Functions in C  ?

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

呼び出し構文に基づいて静的関数と非静的関数のどちらを呼び出すかを決定することは、望ましい機能となる可能性があります。ただし、C では、この効果を達成するのが難しい場合があります。

C 標準では、静的宣言か非静的宣言のみが異なる関数のオーバーロードを明示的に禁止しています。具体的には、静的バリアントと非静的バリアントを含む、同一のシグネチャを持つメンバー関数はオーバーロードできません。

<code class="cpp">class Foo {
    static void print();
    void print();  // Compiler error: cannot overload with static function
};</code>
ログイン後にコピー

さらに、クラス メンバー構文を使用して静的関数を呼び出すことも可能ですが、これにより曖昧さが生じます。同じシグネチャを持つ複数の関数が存在する場合。

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

int main() {
    Foo f;
    f.print();  // Ambiguous: which print function is being called?
}</code>
ログイン後にコピー

呼び出す特定の関数を決定するには、this キーワードの使用を検討できます。ただし、これは常に関数が呼び出されるオブジェクトを指すため、静的呼び出しと非静的呼び出しを区別するのには適していません。

<code class="cpp">// This keyword is always non-NULL, making it impossible to determine static vs. non-static calls.
cout << (this == nullptr ? "static" : "non-static");</code>
ログイン後にコピー

結論として、PHP は静的呼び出しと非静的呼び出しを区別する方法を提供します。非静的関数呼び出しでは、C には同等のメカニズムがありません。静的関数と非静的関数は、目的の動作を実現するために、一意のシグネチャを持つか、追加のメカニズムを利用する必要があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!