c++ 的 try catch

try catch由来

当程序中出现错误时,会导致程序的崩溃,程序中断执行。当使用 try catch 块时,在try块中的程序遇到错误的时候,会被catch 捕获,跳过执行try块中的其他部分,在catch块中处理过后,继续执行之后的内容。
不会导致程序的中断退出。

写法:

try
  {
    ...
  }catch(std::exception& e)
  {
    //其他的错误
  }
自定义exception
class MyException : public exception
{
  const char * what () const throw ()
  {
    return "C++ Exception";
  }

int main(){
	try
  {
    ...
    throw Myexception();
  }catch(std::exception& e)
  {
    //其他的错误
  }
	return 0;
}
};

exception 是所有异常的父类
what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。

### C++ 中 `try` 和 `catch` 的基本用法 在C++中,异常处理机制允许程序检测并响应错误条件而不必立即终止执行。这主要通过三个关键字来完成:`try`、`catch` 和 `throw`。 #### 基本结构 当一段可能引发异常的代码被包裹在一个 `try` 块内时,如果该段代码确实触发了一个未预期的情况,则会创建一个对象并通过 `throw` 发送出去。随后,这个异常会被最近的一个匹配类型的 `catch` 子句所拦截,并在那里得到适当处理[^1]。 ```cpp #include <iostream> using namespace std; void mightGoWrong() { bool errorOccured = true; if (errorOccoured) { throw "Something went wrong"; // 抛出字符串作为异常 } } int main() { try { mightGoWrong(); } catch(const char* msg) { // 捕捉由mightGoWrong函数抛出的字符指针类型异常 cout << "Caught an exception: " << msg << endl; } return 0; } ``` 此例子展示了最简单的形式,在这里定义了一个名为 `mightGoWrong()` 的函数,它会在特定条件下抛出一条消息给调用者;而主函数中的 `try-catch` 结构负责捕捉任何来自上述函数内部产生的异常情况[^2]。 #### 多重捕获器的应用 有时同一个 `try` 块可能会因为不同原因产生多种不同类型或类别的异常事件。为了能够区分它们各自采取不同的应对措施,可以在单个 `try` 后面跟随多个 `catch` 来分别针对每种可能性作出反应: ```cpp #include <iostream> #include <vector> using namespace std; class MyException : public exception { public: const char * what () const throw () { return "My custom exception"; } }; void checkIndex(int index, int size){ if(index >= size || index < 0){ throw out_of_range("Invalid Index"); } } int main(){ vector<int> vec(5); try{ checkIndex(7,vec.size()); // 这里将会抛出std::out_of_range异常 // 或者可以自定义异常 // throw MyException(); } catch(out_of_range& e){ // 特定于范围越界的异常处理器 cerr<<"Standard Exception Caught:"<<e.what()<<endl; } catch(MyException &excep){// 自定义异常处理器 cerr<< excep.what()<<endl; } catch(...){ // 所有未知类型的通用异常处理器 cerr <<"Unknown Error Occurred!"<<endl; } return 0; } ``` 这段代码首先尝试访问超出向量界限的位置,因此引发了标准库提供的 `std::out_of_range` 类型的异常。接着是另一个可选部分,演示了如何声明自己的异常类别以及相应的处理逻辑。最后还有一个通配符版本用来兜底那些事先未曾预料到的情形[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值