呼び出し構文に基づいて静的関数と非静的関数のどちらを呼び出すかを決定することは、望ましい機能となる可能性があります。ただし、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 サイトの他の関連記事を参照してください。