异常安全函数提供以下三个保证之一:
基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效。没有任何对象或数据结构会因此而败坏,所有对象都处于一种内部前后一致的状态(例如所有的class约束条件都继续获得满足)。然而程序的现实状态恐怕不可预料,举个例子,在一个成员函数调用发生异常后,没有达到预期的状态,也没有恢复到调用之前的状态,而是随机选择了一种缺省的状态,但客户无法预料是哪一种情况。
强烈保证:如果异常被抛出,程序状态不改变。调用这样的函数需要有这样的认知:如果函数成功,就是完全成功,如果函数失败,程序会恢复到调用函数之前的状态。
和这种提供强烈保证的函数共事,比和刚才说的那种只提供基本承诺的函数共事,容易多了,因为在调用一个提供强烈保证的函数后,程序状态只有两种可能:如期般地到达函数成功执行后的状态,或回到函数被调用前的状态。于此成对比的是,如果调用一个只提供基本承诺的函数,而真的出现异常,程序有可能处于任何状态—-只要那是个合法状态。
不抛掷保证:承诺绝不抛出异常,因为它们总是能够完成它们原先承诺的功能。作用于内置类型身上的所有操作都提供nothrow保证。这是异常安全码中一个必不可少的关键基础材料。