C++语法 - try块和异常处理
1. 异常就是运行时出现的不正常,例如运行时耗尽了内存或遇到意外的非法输入。
2. throw表达式:错误检测部分使用这种表达式来说明遇到了不可处理的错误。
3. try块:在try块中执行的代码所抛出的异常(调用的函数中抛出的异常或直接使用throw抛出的异常),通常会被其中一个catch子句处理。
4. 由标准库定义的一组异常类,用来在throw和相应的catch之间传递有关的错误信息。
5. 与其他块语句一样,try块引入局部作用域,在try块中声明的变量,包括catch子句中声明的变量,不能在try外面引用。
6. 每一个标准库异常类都定义了名为what的成员函数。这个函数不需要参数,返回C风格字符串。在出现runtime_error的情况下,what返回的C风格字符串,是用于初始化runtime_error的string对象的副本。
7. 程序的执行路径也许在遇到抛出异常的代码前,就已经经过了多个try块。寻找处理代码的过程与函数调用链刚好相反。抛出一个异常时,首先要搜索的是抛出异常的函数。如果没有找到匹配的catch,则终止这个函数的执行,并在调用这个函数的函数中寻找相匹配的catch。如果不存在处理该异常的catch子句,程序的运行就要跳转到名为terminate的标准库函数,该函数定义在exception头文件中,此函数行为依赖于系统,通常将导致程序非正常退出。
8. 标准异常类的4个头文件:
#include <exception>
#include <stdexcept>
#include <new>
#include <typeinfo>
9. exception、bad_alloc以及bad_cast类型只定义了默认构造函数,无法在创建这些类型的对象时为它们提供初值。其他的异常类型则只定义了一个使用string初始化式的构造函数。
10. 对于接受string初始化式的异常类型,what函数将返回该string作为C风格字符数组。
11. 代码范例:
try
{
throw std::runtime_error("xsj: a runtime error occured!");
}
catch (std::runtime_error err)
{
std::cout << err.what() << std::endl;
}
                    
                
                
            
        
浙公网安备 33010602011771号