C++ stl和例外

C++ stl和例外,c++,stl,C++,Stl,如果我使用reserve()为向量保留足够的元素,push_back()(或insert())是否会引发异常 是否有一个引用指定哪个stl函数抛出/不抛出任何异常 谢谢。当复制构造抛出时,我会说向后推抛出 现在,std::vector的异常安全实现将保持vector的状态,与调用push_back或insert之前的状态相同,以便继续使用该对象 另外,请看一下大卫·亚伯拉罕的作品。我只能回答两个问题中的第一个 方法reserve(K)在vector上分配足够的空间来容纳K元素,而无需进行昂贵的重

如果我使用reserve()为向量保留足够的元素,push_back()(或insert())是否会引发异常

是否有一个引用指定哪个stl函数抛出/不抛出任何异常


谢谢。

当复制构造抛出时,我会说
向后推
抛出

现在,
std::vector
的异常安全实现将保持
vector
的状态,与调用
push_back
insert
之前的状态相同,以便继续使用该对象


另外,请看一下大卫·亚伯拉罕的作品。

我只能回答两个问题中的第一个

方法
reserve(K)
vector
上分配足够的空间来容纳
K
元素,而无需进行昂贵的重新分配,但是如果进行了足够的插入,那么
vector
的大小可能会增加

如果我使用reserve()为向量保留足够的元素,push_back()(或insert())是否会引发异常

它不需要执行重新分配,因此向量本身不会抛出任何异常。但是,您插入的元素在复制到向量中时可能会抛出异常,因此
push_back
insert
仍然会抛出异常

是否有一个引用指定哪个stl函数抛出/不抛出任何异常


是的,C++标准包含了这些信息。

A<代码>向量< /代码>不能真正实现强异常保证。它无法回滚到以前的状态,因为复制元素可能会抛出,而向量会按值存储它们
vector
只提供基本保证(vector将保持有效状态,不会泄露任何资源)@jalf:你确定吗?我记不起那个纬度了。如果向向量添加第6个元素,并且需要重新分配,则第4个副本可能会失败。但此时,原来的5个元素数组仍然存在。甚至可能不需要回滚:只有在所有复制成功后,您才会交换指针。您是否尝试在google上搜索“c++引用”!?令人惊讶的是,第一个结果正是您想要的。我不确定这个引用是否包含我需要的所有信息,因为我找不到任何地方可以保证函数不会抛出。在这种情况下,我是要假设它意味着函数真的没有抛出,还是引用只是省略了这些信息?