std::元组分配和复制/移动异常保证
std::tuple assignment and copy/move exception guarantees
我在当前草稿中没有看到任何关于 subj 的内容。我做对了吗,以下代码
struct Omg { Omg &operator=(Omg const &o) { throw 0; } };
std::tuple t0{42, Omg{}};
std::tuple t1{10, Omg{}};
t1 = t0;
是否完全允许将 T1 保留为半分配状态? 也就是说,它的第一个元素可能已经改变了,但第二个元素可以保持原样,甚至变得不一致?
是否完全允许将 T1 保留为半分配状态?
是的。复制分配仅指定为:
效果:将
u
的每个元素分配给*this
的相应元素。
标准库中还有其他类型确实指定了异常保证(例如optional
(,但tuple
没有提供。
请注意,它不指定分配的顺序。实现可以首先分配Omg
(因此不会更改t1
(或首先分配int
(因此最终会得到半分配状态(。
我认为实现也可以选择进行复制和交换,从而提供强大的异常保证。这将匹配指定的效果。但这并不能由标准保证。
相关文章:
- 处理多个异常集合的C++方法
- 将对象移动到std::shared_ptr
- 我在c++代码中生成了一个运行时#3异常
- 何时在引用或唯一指针上使用移动语义
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 对 r 值使用移动赋值运算符时的异常
- std::元组分配和复制/移动异常保证
- std::vector::emplace() 真的在面对抛出移动构造函数/赋值运算符时提供了强大的异常保证吗?
- 移动语义行为异常
- 可移动但不可复制的异常
- 我目前正在使用C++生成器 6 XE4 来开发财务图表.移动到图表画布上的某个位置时出现异常
- 异常安全代码和移动语义
- 异常安全移动操作员
- 移动分配运算符出现异常
- 文件异常和光标移动c++
- 异常、移动语义和优化:任由编译器摆布 (MSVC2010)?
- 可能失败的函数的接收参数和移动语义(强异常安全性)
- OpenGL使用鼠标点击与鼠标光标移动的回调时出现未处理的异常
- 移动构造函数和强大的异常保证