当使用Visual C ++编译器在调试模式下编译时,此代码调用一个断言。
std::vector<int> test;
++test.begin();
该计划说:
Debug Assertion Failed!
...
Expression: vector iterator not incrementable.
至于我,这段代码是完全合法的,因为我不打算取消引用迭代器。问题是:标准是否未定义(或可能是实现定义)?
答案 0 :(得分:8)
基本上,您不能接受container.end()
并递增它。
在这种情况下,因为您有一个空容器container.begin() == container.end()
,因此您也无法增加begin()
。
您可以在C ++ 2011表107中找到对此的引用。它基本上表示++iterator
仅在iterator
可解除引用时才有效。
所以这是合法的未定义行为。