答案:try-catch用于捕获异常,提升程序健壮性;将可能出错代码放入try块,用catch捕获并处理,推荐使用标准或自定义异常类,注意catch顺序与异常安全。
在C++中,try-catch 语句用于捕获和处理程序运行过程中可能发生的异常,避免程序因错误而直接崩溃。使用 try-catch 的核心思想是:将可能出错的代码放在 try 块中,然后用 catch 块来捕获并处理抛出的异常。
基本语法结构
try-catch 的基本写法如下:
try { // 可能抛出异常的代码 throw exception_type("错误信息"); } catch (exception_type& e) { // 处理特定类型的异常 std::cout << "捕获异常:" << e.what() << std::endl; } catch (...) { // 捕获所有其他未处理的异常(可选) std::cout << "未知异常" << std::endl; }
常见异常类型
C++ 标准库定义了一些常用的异常类,它们都继承自 std::exception,使用时需包含 #include <stdexcept>:
- std::runtime_error:运行时错误
- std::logic_error:逻辑错误
- std::invalid_argument:无效参数
- std::out_of_range:越界访问
示例:
立即学习“C++免费学习笔记(深入)”;
#include <iostream> #include <stdexcept> <p>int main() { try { throw std::invalid_argument("参数无效"); } catch (const std::invalid_argument& e) { std::cout << "捕获到参数错误:" << e.what() << std::endl; } catch (const std::exception& e) { std::cout << "标准异常:" << e.what() << std::endl; } return 0; }</p>
如何抛出异常
使用 throw 关键字可以手动抛出异常。可以抛出基本类型(如 int、String),但推荐使用标准异常类或自定义异常类。
自定义异常示例:
class MyException : public std::exception { public: const char* what() const noexcept override { return "这是一个自定义异常"; } }; <p>try { throw MyException(); } catch (const MyException& e) { std::cout << e.what() << std::endl; }</p>
多个 catch 块的匹配顺序
catch 块按顺序匹配,应将派生类异常放在前面,基类放在后面,否则会被基类捕获而无法进入派生类处理块。
正确写法:
try { throw std::out_of_range("越界"); } catch (const std::out_of_range& e) { std::cout << "越界异常:" << e.what() << std::endl; } catch (const std::exception& e) { std::cout << "其他标准异常" << std::endl; }
基本上就这些。try-catch 能有效提升程序的健壮性,关键是合理抛出、精准捕获,并注意异常安全。不复杂但容易忽略细节。
评论(已关闭)
评论已关闭