迭代但不解除引用C ++中的无效迭代器

时间:2015-03-31 14:19:40

标签: c++ visual-c++

当使用Visual C ++编译器在调试模式下编译时,此代码调用一个断言。

std::vector<int> test;
++test.begin();

该计划说:

Debug Assertion Failed!

...

Expression: vector iterator not incrementable.

至于我,这段代码是完全合法的,因为我不打算取消引用迭代器。问题是:标准是否未定义(或可能是实现定义)?

1 个答案:

答案 0 :(得分:8)

基本上,您不能接受container.end()并递增它。

在这种情况下,因为您有一个空容器container.begin() == container.end(),因此您也无法增加begin()

您可以在C ++ 2011表107中找到对此的引用。它基本上表示++iterator仅在iterator可解除引用时才有效。

A portion of C++ 2011 Table 107

所以这是合法的未定义行为。