第6章 语句(4)

本文介绍了C++中的异常处理机制,包括throw表达式、try块和catch子句的作用及使用方法。同时,还探讨了标准库提供的异常类及其定义位置,并讲解了如何利用预处理器变量NDEBUG和assert宏进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6.13 try块和异常处理

throw表达式(throw expression),错误检测部分使用这种表达式来说明遇到了不可处理的错误。可以说,throw引发(raise)了异常条件。

try块(try block),错误处理部分使用它来处理异常。try语句块以try关键字开始,并以一个或多个catch子句(catch clause)结束。在try块中执行的代码所抛出(throw)的异常,通常会被其中一个catch子句处理。由于它们“处理”异常,catch子句也称为处理代码(handler).

由标准库定义的一组异常类(expression class),用来throw和相应的catch之间传递有关的错误信息。

6.13.2 try块

抛出一个异常时,如果不存在处理异常的catch块,程序的运行就要跳转到名为terminate的标准库函数,该函数在exception头文件中定义。这个标准库函数的行为依赖于系统,通常情况下,它的执行将导致程序非正常退出。

6.13.3 标准异常

标准库异常类定义在四个头文件中:

(1) exception头文件中定义了最常见的异常类,它的类名是exception。

(2) stdexcept头文件定义了几种常见的异常类。

(3) new 头文件定义了bad_alloc异常类型,提供因无法分配内存而由new抛出的异常。

(4) type_info 头文件定义了bad_cast异常类型。

异常类型定义了一个名为what的操作。这个函数不需要任何参数,并且返回const char*类型的值。它返回的指针指向一个C风格字符串。使用C风格字符串的目的是为所抛出的异常提供更详细的文字描述。

对于接受string初始化式的异常类型,what函数将返回该string作为C风格字符数组。

6.14 使用预处理器进行调试

另一个常见的调试技术是使用NDEBUG预处理变量以及assert(断言)预处理宏(preprocessor macro)。assert宏是在cassert头文件中定义的,所有使用assert的文件都必须包含这个头文件。

预处理宏有点像函数调用。assert宏需要一个表达式作为它的条件。

#include <cassert>
	assert(2>1);
	assert(2<1);

Assertion failed: 2<1, file c:\documents and settings\10170660\my documents\visu
al studio 2010\projects\cplusplusproj\cplusplusproj\cplusplusproj.cpp, line 21


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值