try catch 异常处理

C++中使用异常时应注意的问题
    任何事情都是两面性的,异常有好处就有坏处。如果你是C++程序员,
并且希望在你的代码中使用异常,那么下面的问题是你要注意的。

        1. 性能问题。这个一般不会成为瓶颈,但是如果你编写的是高性能或者实时性要求比较强的软件,
就需要考虑了。

       2. 指针和动态分配导致的内存回收问题:在C++中,不会自动回收动态分配的内存,
如果遇到异常就需要考虑是否正确的回收了内存。在java中,就基本不需要考虑这个,有垃圾回收机制。

        3. 函数的异常抛出列表:java中是如果一个函数没有在异常抛出列表中显式指定要抛出的异常,
就不允许抛出;可是在C++中是如果你没有在函数的异常抛出列表指定要抛出的异常,意味着你可以抛出任何异常。

        4. C++中编译时不会检查函数的异常抛出列表。这意味着你在编写C++程序时,
如果在函数中抛出了没有在异常抛出列表中声明的异常,编译时是不会报错的。而在java中会检查。

        5. 在java中,抛出的异常都要是一个异常类;但是在C++中,你可以抛出任何类型,
你甚至可以抛出一个整型。(当然,在C++中如果你catch中接收时使用的是对象,而不是引用的话,那么你抛出的对象必须要是能够复制的。这是语言的要求,不是异常处理的要求)。

        6. 在C++中是没有finally关键字的。而java和python中都是有finally关键字的。

捕获异常
抛出异常用throw,捕获用try……catch。

我们可以借助 C++ 异常机制来捕获上面的异常,避免程序崩溃。捕获异常的语法为:

try{
    // 可能抛出异常的语句
}catch(exceptionType variable){
    // 处理异常的语句
}

解释如下:

异常	描述
std::exception	该异常是所有标准 C++ 异常的父类。
std::bad_alloc	该异常可以通过 new 抛出。
std::bad_cast	该异常可以通过 dynamic_cast 抛出。
std::bad_exception	这在处理 C++ 程序中无法预期的异常时非常有用。
std::bad_typeid	该异常可以通过 typeid 抛出。
std::logic_error	理论上可以通过读取代码来检测到的异常。
std::domain_error	当使用了一个无效的数学域时,会抛出该异常。
std::invalid_argument	当使用了无效的参数时,会抛出该异常。
std::length_error	当创建了太长的 std::string 时,会抛出该异常。
std::out_of_range	该异常可以通过方法抛出,例如 std::vector 和 std::bitset<>::operator[]()。
std::runtime_error	理论上不可以通过读取代码来检测到的异常。
std::overflow_error	当发生数学上溢时,会抛出该异常。
std::range_error	当尝试存储超出范围的值时,会抛出该异常。
std::underflow_error	当发生数学下溢时,会抛出该异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
try-catch异常处理机制是一种在程序中处理异常的方式。它允许程序员在可能引发异常的代码块中捕获并处理异常,以避免程序崩溃或产生不可预料的结果。 try-catch块由两部分组成:try块和catch块。在try块中,我们放置可能引发异常的代码。如果在try块中发生了异常,程序会立即跳转到catch块,并执行catch块中的代码来处理异常。 catch块可以捕获特定类型的异常,并根据需要进行处理。在catch块中,我们可以编写适当的代码来处理异常,例如输出错误信息、记录日志、进行恢复操作等。 以下是try-catch异常处理机制的基本语法: ``` try { // 可能引发异常的代码 } catch (ExceptionType1 e1) { // 处理ExceptionType1类型的异常 } catch (ExceptionType2 e2) { // 处理ExceptionType2类型的异常 } catch (ExceptionType3 e3) { // 处理ExceptionType3类型的异常 } finally { // 可选的finally块,无论是否发生异常都会执行 } ``` 在上述代码中,可以有多个catch块来捕获不同类型的异常。当发生异常时,程序会按照catch块的顺序进行匹配,找到第一个匹配的catch块来处理异常。如果没有匹配的catch块,异常将被传递给上层调用者进行处理。 另外,还可以使用finally块来执行无论是否发生异常都需要执行的代码。finally块中的代码在try-catch块执行完毕后总是会被执行,无论是否发生异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值