30.4 错误处理

标准库包含的组件已有将近40年的开发历程。因此,它们处理错误的风格和方法并不统一:

·C风格库函数大多数通过设置errno来指示发生了错误;见13.1.2节和40.3节。

·很多对元素序列进行操作的算法返回一个尾后迭代器来指示“未找到”或“失败”;见33.1.1节。

·I/O流库要依赖于每个流中的一个状态来反映错误,并可能(根据用户需要)通过抛出异常来指示错误;见38.3节。

·一些标准库组件,如vector、string和bitset通过抛出异常来指示错误。

标准库的设计目标之一是所有组件都遵守“基本保证”(见13.2节);即,即使抛出了异常,也不会有资源(如内存)泄漏,且不会有标准库类的不变式被破坏的情况出现。

30.4.1 异常

一些标准库组件通过抛出异常来报告错误:

任何直接或间接使用这些组件的代码都可能遇到这些异常。而且,对任何操作,如果它处理可能抛出异常的对象,那么我们必须假定这个操作也抛出此异常,除非已经小心地避免了这种情况的发生。例如,如果packaged_task要求执行的函数会抛出一个异常,那么packaged_task也会抛出一个异常。

除非你确认使用组件的方式不会令它们抛出异常,否则坚持在某处(如main())捕获标准库异常类层次的某个根类(如exception)和任意异常(…)是一个很好的编程习惯。 ...

Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.