C++ 如何捕获递增迭代器异常?
我有一个空的C++ 如何捕获递增迭代器异常?,c++,C++,我有一个空的向量,我试图增加它的迭代器,但是迭代器是空的,所以它应该抛出一个异常。这就是为什么我试图用一个通用的catch子句来捕捉它。遗憾的是,它不起作用。我只得到一条消息向量迭代器,不能递增。我应该抓住哪一个例外 vector<int> myVec; auto iterator = myVec.begin(); try { ++iterator; } catch(exception& e) { //universal exception doesn't cat
向量
,我试图增加它的迭代器,但是迭代器是空的,所以它应该抛出一个异常。这就是为什么我试图用一个通用的catch
子句来捕捉它。遗憾的是,它不起作用。我只得到一条消息向量迭代器,不能递增。我应该抓住哪一个例外
vector<int> myVec;
auto iterator = myVec.begin();
try {
++iterator;
} catch(exception& e) { //universal exception doesn't catch an exception
Logger::WriteMessage("Caught an Exception");
}
向量myVec;
自动迭代器=myVec.begin();
试一试{
++迭代器;
}catch(异常&e){//通用异常不捕获异常
记录器::WriteMessage(“捕获到异常”);
}
没有例外-这是未定义的行为。解决方案是不要迭代超过迭代器的边界。“所以它应该抛出一个异常”——谁说?递增原始指针是否会引发异常?否。迭代器的增量也不会超过其容器的边界。现在,如果你试图去引用一个无效的迭代器(就像去引用一个无效的指针一样),那么所有的讨厌的事情都会发生。尽管如此,仍然不能保证会抛出异常。我来自Java,所以我认为如果程序到达终点或抛出未处理的异常,程序就会结束。我不认为它会以某种方式结束,因为在不抛出任何东西的情况下。AFAIK,“vector iterator not incrementable”不是运行时异常错误消息,而是断言错误消息,因此除非在调试器中运行STL的调试构建,否则不可能看到它,一个失败的断言可以立即终止程序。它是vector
源代码调试版本中的调试断言。STL允许您调试问题,如果调试器不处理错误,程序将立即结束。您的代码中没有可捕获的内容,这就是您的catch
无法工作的原因。如果在发布模式下编译,您甚至看不到错误,如果您尝试使用无效的迭代器,代码中只会有一个逻辑炸弹。这是一个调试工具,不是运行时错误处理工具。