Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果一个类型有一个不能失败的交换函数,这可以更容易地为其他函数提供强大的异常安全保证。这是因为我们可以首先完成函数的所有可能“偏向一边”失败的工作,然后使用非抛出交换来提交工作。
但是,保证交换永远不会失败还有其他好处吗?
例如,是否存在这样的情况,即无失败交换的存在使得另一个函数更容易提供基本保证?
假设我这样做:
class C { T a, b; // invariant: a > b void swap(C& other); };
如果 T::swap(T&) 可能抛出,似乎没有办法在基本保证的情况下实现 C::swap() 。我必须添加一个间接级别并存储 T* 而不是 T。