C++ の例外仕様では、例外を正しく処理するために、関数によってスローされる可能性のある例外のタイプを指定できます。例外仕様を使用するには、関数宣言で noexc キーワードを使用し、その後に例外タイプのリストを使用します。たとえば、divide 関数では、 noexc(std::invalid_argument) を使用して、invalid_argument 例外のみがスローされるように指定し、他の例外タイプがコンパイラ エラーを引き起こすことを保証します。
C++ テクノロジにおける例外処理: 例外仕様を使用した例外タイプのチェック
C++ では、例外は例外的な状況を処理するために使用されるメカニズムです。例外仕様を使用すると、特定の関数に対してスローされる例外のタイプを指定できます。これは、コンパイラーがコードの例外をチェックできるため、例外が正しく処理されることを保証する場合に役立ちます。
例外仕様の使用方法
例外仕様を使用するには、関数宣言で noreason
キーワードを使用できます。 noreason
キーワードの後には、この関数によってスローされる可能性のある例外のタイプを示す例外タイプのリストが続きます。例外タイプが指定されていない場合は、関数が例外をスローしないことを意味します。 noexcept
关键字。noexcept
关键字后跟一个异常类型列表,表示该函数可以引发的异常类型。如果没有指定异常类型,则表示该函数不引发任何异常。
语法为:
返回值类型 函数名 (参数列表) noexcept(异常列表) { // 函数体 }
实战案例
让我们考虑一个计算两个数字除法的函数:
int divide(int num1, int num2) { if (num2 == 0) { throw std::invalid_argument("除数不能为 0"); } return num1 / num2; }
我们可以使用异常规范来确保该函数只引发 invalid_argument
int divide(int num1, int num2) noexcept(std::invalid_argument) { if (num2 == 0) { throw std::invalid_argument("除数不能为 0"); } return num1 / num2; }
実際の例
🎜🎜2 つの数値の除算を計算する関数を考えてみましょう: 🎜int main() { try { divide(10, 0); // 将引发 std::invalid_argument 异常 divide(10, 2); // 将引发 std::overflow_error 异常,但这是不允许的 } catch (const std::exception& e) { std::cout << e.what() << std::endl; } return 0; }🎜例外仕様を使用して、関数が
invalid_argument
のみを発生させるようにすることができます。 > 例外: 🎜rrreee🎜 さて、他の種類の例外を使用しようとすると、コンパイラはエラーを発行します。例: 🎜rrreee🎜 コードの 2 行目は関数の例外仕様に違反しているため、コンパイラはエラーを生成します。 🎜以上がC++ テクノロジにおける例外処理: 例外仕様を使用して例外タイプをチェックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。