在exceptional c++的第17项中,我发现:
首先,对于所有容器,多元素插入(“迭代器范围”插入)从来都不是强异常安全的。
但在effective STL的第1项中,我发现:
如果您需要用于多元素插入的事务性语义(例如范围表单--请参阅项目5),则需要选择list,因为list是为多元素插入提供事务性语义的唯一标准容器。
在249 of the c++ standard library 2th页面中,我发现:
对于列表,即使是多元素插入操作也是事务安全的.
所以我的问题是哪一个是对的?强异常安全意味着事务安全吗?
发布于 2016-04-06 14:07:01
对于所有的过载的std::list::insert,强烈的例外安全是有保证的。
例外情况 如果抛出异常,则不会产生任何效果(强异常保证)。
从标准来看,$23.3.5.4/2 list modifiers [list.modifiers]
如果抛出异常,则不会产生任何效果。
然后
是。这里是Herb的一个解释:
强保证:如果抛出异常,则程序状态保持不变。这个级别始终意味着全局提交或回滚语义,包括在操作失败时不对容器中的引用或迭代器失效。
https://stackoverflow.com/questions/36453394
复制相似问题