如果在执行期间抛出异常,如何描述没有副作用的方法?

时间:2008-11-12 10:14:03

标签: terminology exception-safe

我不记得用于此和其他相关属性的术语。

编辑 - 也许这样的概念不存在,但我记得在有效的C ++(或更有效的C ++)中阅读了一些内容,他提倡使用交换在函数的最后提交更改,因为向量交换函数保证不会抛出异常。

3 个答案:

答案 0 :(得分:2)

我认为你的意思是说该功能是“异常安全的”。参见例如http://en.wikipedia.org/wiki/Exception_safety

维基百科的文章进一步将安全分为不同层次。这是与此相关的内容:

  

2。提交或回滚语义,也称为强异常安全或无变更保证:操作可能失败,但失败的操作保证没有副作用,因此所有数据都保留原始值。

引用了一个引入异常安全性和提交或回滚语义的STL设计文档:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.asc

答案 1 :(得分:2)

你可能会想到exception guarantee,特别是“强有力的保证”。

答案 2 :(得分:1)

阅读完编辑后,我怀疑你的标题有点不正确。你是否真的意味着它没有副作用是否抛出异常(根据当前的措辞)或抛出异常时没有副作用,但是如果方法完成而没有抛出一个例外,它会/可能有副作用?有一个很大的区别:)

后者在Accelerated C#2008中描述为“异常中立”。