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 サイトの他の関連記事を参照してください。