関数シグネチャの "throw" の危険性
関数シグネチャに "throw" キーワードを組み込みたくなるかもしれませんが、例外の可能性を明示的に宣言する場合は、これを行わないことを強くお勧めします。一見単純な目的にもかかわらず、このアプローチが適切な選択ではないと考えられる技術的な理由がいくつかあります。
コンパイラの制限
コンパイラが強制力を持たないことから、1 つの重大な問題が発生します。関数シグネチャで宣言された例外仕様。その結果、コンパイラは、関数が指定された例外を実際にスローするかどうかを検証できません。これは、関数が実際には別の例外をスローするか、まったくスローしない可能性があるため、潜在的に誤解を招くシグネチャにつながります。
実行時の無効性
例外の仕様は実行時にチェックされ、例外が課せられます。パフォーマンスのオーバーヘッド。これは、コンパイル時にこれらのチェックをより効率的に実行する最新の例外処理メカニズムと比較した場合、特に望ましくありません。
一貫性のない実装
例外仕様には、さまざまなレベルでさまざまなサポートレベルがあります。コンパイラ。たとえば、MSVC は、例外がスローされないことを保証するものとして解釈される "throw()" の特殊な場合を除いて、例外の仕様をほとんど無視します。この不一致により、プラットフォーム固有の問題が発生し、移植性が複雑になります。
例外仕様の代替
関数シグネチャで "throw" を使用することの欠点を考慮して、以下を採用することをお勧めします。例外処理の代替アプローチ。これらには次のものが含まれます:
以上が関数シグネチャで「throw」の使用を避けるべきなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。