try
块内使用throw
关键字抛出的。异常处理程序使用catch
关键字声明,它必须紧跟在try
块之后。
|
|
An exception occurred. Exception Nr. 20 |
try
块中。在本例中,该代码只是抛出一个异常。
|
|
throw
表达式接受一个参数(在本例中为整数值20
),该参数作为参数传递给异常处理程序。try
块的结束大括号之后立即使用catch
关键字声明。catch
的语法类似于带有单个参数的常规函数。此参数的类型非常重要,因为throw
表达式传递的参数类型会与之进行检查,只有当它们匹配时,该异常才会被该处理程序捕获。catch
表达式);每个处理程序都具有不同的参数类型。只有参数类型与throw
语句中指定的异常类型匹配的处理程序才会被执行。...
)作为catch
的参数,该处理程序将捕获任何异常,无论抛出的异常类型是什么。这可以作为默认处理程序,捕获所有未被其他处理程序捕获的异常。
|
|
int
也不是char
的异常。throw
语句之后!。try
块中嵌套try-catch
块。在这些情况下,我们有可能内部catch
块将异常转发给其外部级别。这是通过不带参数的throw;
表达式完成的。例如。
|
|
throw
说明符。例如。
|
|
myfunction
的函数,该函数接受一个char
类型的参数并返回一个double
类型的值。如果该函数抛出除int
以外的任何类型的异常,该函数将调用std::unexpected,而不是查找处理程序或调用std::terminate。throw
说明符为空,不带类型,则表示任何异常都会调用std::unexpected。没有throw
说明符的函数(常规函数)从不调用std::unexpected,而是遵循查找其异常处理程序的正常路径。
|
|
std::exception
,定义在<exception>
头文件中。该类有一个名为what
的虚成员函数,它返回一个以null结尾的字符序列(类型为char *
),并且可以在派生类中被覆盖,以包含某种异常描述。
|
|
My exception happened. |
&
)来捕获异常对象,因此这也捕获了派生自exception
的类,比如我们类型为myexception
的myex
对象。exception
的异常。它们是:exception | 描述 |
---|---|
bad_alloc | 由new 在分配失败时抛出 |
bad_cast | 由dynamic_cast 在动态转换失败时抛出 |
bad_exception | 由某些动态异常说明符抛出 |
bad_typeid | 由typeid 抛出 |
bad_function_call | 由空function 对象抛出 |
bad_weak_ptr | 由shared_ptr 在传递了错误的weak_ptr 时抛出 |
exception
,头文件<exception>
定义了两个通用的异常类型,可以被自定义异常继承以报告错误。exception | 描述 |
---|---|
logic_error | 与程序内部逻辑相关的错误 |
runtime_error | 运行时检测到的错误 |
|
|
bad_alloc
。因为bad_alloc
派生自标准基类exception
,所以它可以被捕获(通过引用捕获,捕获所有相关类)。![]() 类型转换 | ![]() 目录 | ![]() 预处理器指令 |