C のクラス インスタンスで静的メンバー メソッドを呼び出す
C でクラス インスタンスで静的メンバー メソッドを呼び出すことの妥当性に関して疑問が生じます。静的メンバー メソッドは通常、クラス名を通じて呼び出されますが、以下のコード スニペットはこの規則と矛盾しているようです:
class Test { public: static void DoCrash() { std::cout << "TEST IT!" << std::endl; } }; int main() { Test k; k.DoCrash(); }
質問:
答え:
従来、静的メンバー メソッドはクラス名を通じて呼び出されますが、C 標準ではクラス インスタンスで呼び出すことが許可されています。これは、C 03 標準の次のセクションから明らかです:
「クラス X の静的メンバー s は、修飾 ID 式 X::s を使用して参照できます。クラスを使用する必要はありません」静的メンバーを参照するためのメンバー アクセス構文 (5.2.5) 静的メンバーは、クラス メンバー アクセス構文を使用して参照できます。この場合、object-expression は次のようになります。 "
これは、クラス インスタンス構文を介した静的メンバー メソッドの呼び出しが許可されるだけでなく、セマンティクスも異なることを意味します。このような場合、オブジェクト式が評価され、汎用プログラミングのコンテキストで利点が得られる可能性があります。
例:
次のコードは、静的メンバー メソッドがどのように使用されるかを示しています。クラス名とインスタンス構文の両方で使用できます:
class Process { public: static void Reschedule() { /* ... */ } }; int main() { Process::Reschedule(); // Using class name syntax Process p; p.Reschedule(); // Using instance syntax }
以上がC のクラス インスタンスで静的メンバー メソッドを呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。