C 関数の例外処理のベスト プラクティスには、明確に定義された階層例外の定義、コンパイル時のエラー処理を強制する例外仕様の使用、try-catch ブロックによる例外の適切な処理、重複した例外処理の回避、RAII 原則に従う、およびマスクしないことが含まれます。これにより、アプリケーションの堅牢性が保証されます。
例外処理は、呼び出し中にエラー条件を処理できるため、最新の C に不可欠な部分です。コードの堅牢性と保守性が向上します。この記事では、C 関数での例外処理のベスト プラクティスを検討し、実際のケースを通じてその使用法を示します。
例外を定義するときは、次のことを確認してください:
例外仕様は、関数がスローする可能性のある例外の種類をコンパイラに通知するためのメカニズムです。これにより、コンパイラはコンパイル時にエラー処理を強制できるようになります。例外仕様を使用するには、関数宣言で noExcept
または throw
キーワードを使用します。
// 不抛出异常的函数 int divide(int a, int b) noexcept { ... } // 抛出 std::invalid_argument 的函数 int parse_int(const std::string& str) throw(std::invalid_argument);
関数が例外をスローした場合、それを処理するのは呼び出し元の責任です。 try-catch
ブロックを使用すると、例外をキャッチし、適切なアクションを実行できます。
try { int result = divide(10, 2); // 使用已捕获的异常值 } catch (const std::invalid_argument& e) { std::cerr << "无效的参数:" << e.what() << std::endl; }
文字列を整数に解析する関数 parse_int
の例を考えてみましょう。文字列が有効な整数でない場合、関数は std::invalid_argument
例外をスローします。
#include <exception> #include <string> int parse_int(const std::string& str) throw(std::invalid_argument) { // 检查字符串是否为空 if (str.empty()) { throw std::invalid_argument("空字符串"); } // 遍历字符串并检查字符是否有效 for (char c : str) { if (!isdigit(c)) { throw std::invalid_argument("无效的字符:" + std::string{c}); } } // 将字符串转换为整数 return std::stoi(str); } int main() { try { int result = parse_int("123"); std::cout << "解析结果:" << result << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "错误:" << e.what() << std::endl; } return 0; }
複数の関数呼び出しが同じ例外タイプをスローする可能性がある場合、try-catch
ブロックを使用して複数の関数呼び出しを囲むと、冗長性を回避できます。
try { int result1 = parse_int("123"); int result2 = parse_int("456"); // 处理任何已捕获的 std::invalid_argument 异常 } catch (const std::invalid_argument& e) { ... }
リソース取得は初期化 (RAII) 原則に従うと、例外が発生した場合にリソースが正しく解放されるようになります。スマート ポインターまたは例外安全なコンテナーを使用すると、例外が発生したときにリソースが自動的に解放されるようにできます。
#include <memory> void do_something() { // 使用智能指针管理资源 std::unique_ptr<SomeResource> resource = ...; try { // 使用资源执行操作 } catch (...) { // 异常发生时,resource 将自动释放 } }
例外を処理するときは、catch
ブロックで例外を再スローしたり無視したりしてマスクしないことが重要です。これにより、デバッグとエラー処理がより困難になる可能性があります。代わりに、例外は常にログに記録され、エラーはユーザーに適切に通知される必要があります。
これらのベスト プラクティスを採用することで、例外を効率的に処理し、ユーザー フレンドリーなエラー メッセージを提供する、堅牢で保守可能な C アプリケーションを構築できます。
以上がC++ 関数の例外のベスト プラクティス: 堅牢なアプリケーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。