现在的位置: 首页 > 综合 > 正文

C++ 异常说明/规范

2013年10月01日 ⁄ 综合 ⁄ 共 2940字 ⁄ 字号 评论关闭

1. 概念

 

异常说明/规范(exception specification)指定, 如果函数抛出异常, 被抛出的异常将是包含在该说明中的一种, 或者是从列出的异常中派生的类型.

 

2. 定义

异常说明跟在函数形参表之后. 一个异常说明在关键字throw之后跟着一个(可能为空的)由圆括号括起来的异常类型列表. 如:

这个声明指出, foo是接受int值的函数, 返回void. 如果foo抛出一个异常, 该异常将是std::logic_error或std::runtime_error对象, 或者由std::logic_error或std::runtime_error派生的类型的异常.

 

3. 说明

  • 编译时, 编译器不能也不会试图验证异常说明;
  • 空说明列表指出函数不抛出任何异常;
  • 如果一个函数声明没有指定异常说明, 则该函数可以抛出任意类型的异常;
  • 异常说明是函数接口的一部分, 函数定义以及该函数的任意声明必须具有相同的异常说明;
  • 异常说明不能用于函数重载;
  • 在const成员函数声明中, 异常说明跟在const限定符之后;
  • 如果函数抛出了没有在其异常说明中列出的异常, 就调用标准库函数unexpected. 默认情况下, unexpected函数调用terminate函数, terminate函数一般会终止程序;
  • 异常说明/规范中不仅要包含函数本身引发的异常, 还应该包含该函数调用的其它函数引发的异常, 以此类推;
  • 引发异常时, 编译器总是创建一个临时拷贝, 即使catch块中指定的是引用(这里指定引用的目的并不是避免创建拷贝以提高效率, 而是: 基类引用可以执行派生类对象.). 如: 
     

4. 代码

 

抱歉!评论已关闭.