Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何捕获递增迭代器异常?_C++ - Fatal编程技术网

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
无法工作的原因。如果在发布模式下编译,您甚至看不到错误,如果您尝试使用无效的迭代器,代码中只会有一个逻辑炸弹。这是一个调试工具,不是运行时错误处理工具。