我试图在其他地方找到这个问题,但我遇到的问题对我来说仍然没有意义。我正在使用 Visual C++ 2010,但我的程序出现 vector 超出范围的错误。问题是,它从来没有告诉我哪个 vector 和代码太大而无法检查每一个。我想用 try-catch 来减少东西,但我无法让它们捕获。这是我用来演示的一些示例代码。
try{
std::vector<int> test;
for(int i=0; i<10; i++){
test.push_back(5);
}
if(test[10]=5)
{
}
if(test[-1]=5)
{
}
}
catch(std::exception ex)//also tried exception& and exception*
{
std::cout << "blah";
}
catch(...){
std::cout << "blah";
}
从其他帖子中,我发现了有关通过引用传递、使用 ... 的建议,以及 vector 异常始终由 std::exception 捕获的声明。
那么还有什么可以阻止这种情况发生吗?
最佳答案
std::vector::operator[]
不检查数组边界,因此不会引发 C++ 异常。所以在你的情况下你编程的 behavior is undefined (aka UB) .
您必须使用 std::vector::at
通过边界检查访问元素,这会抛出 std::out_of_range
如果!(pos < size())
.
顺便说一句,始终通过常量引用捕获异常,如下所示:
try {
// ...
} catch(const exception_type_here& e) {
// ...
}
并且永远不要使用 catch-all 子句而不重新抛出(就像你的第二个 catch
)。绝不。
希望有帮助。祝你好运!
关于c++ - 未捕获 vector 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294103/