C++ 为什么向量::插入异常安全

C++ 为什么向量::插入异常安全,c++,vector,C++,Vector,之前我问了一个关于vector::insert的异常安全性是什么的问题(作为参考,答案是它有基本的保证)。我还询问了自引用迭代器(例如vec.insert(vec.end(),vec.begin(),vec.end()),它们似乎被禁止了 似乎对于具有nothrow move构造的任何类型,都可以允许强保证并允许传入自引用迭代器。即使对于没有nothrow move构造的类型,您也可以在允许自引用迭代器的同时提供基本保证。所以我很好奇为什么这些限制离子 为什么会有这些限制(只有基本的异常安全性,

之前我问了一个关于
vector::insert
的异常安全性是什么的问题(作为参考,答案是它有基本的保证)。我还询问了自引用迭代器(例如
vec.insert(vec.end(),vec.begin(),vec.end())
,它们似乎被禁止了

似乎对于具有nothrow move构造的任何类型,都可以允许强保证并允许传入自引用迭代器。即使对于没有nothrow move构造的类型,您也可以在允许自引用迭代器的同时提供基本保证。所以我很好奇为什么这些限制离子


为什么会有这些限制(只有基本的异常安全性,没有自引用迭代器)适当吗?

谁禁止了第一次插入,又是如何禁止的?这肯定会说明限制来自何处?我的错。它们确实应该是同一个向量。我认为这个问题措词不当。第一段是关于什么的?你是在问例外情况,还是关于迭代器无效?你的正确答案是什么理解的状态,问题是什么?(我仍然认为我们应该有一个“grep for question mark”的新问题提交前检查…)我仍然不明白。由于序列容器的要求,该操作甚至无效,因此异常保证似乎不相关。@Puppy:因为标准这么说-输入范围可能不来自容器本身。可能是因为它会在很少ga的情况下给实现者带来更大的负担如果我们删除从同一容器中获取范围的问题,这个问题会变成什么?