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

所以这是合法的未定义行为.
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |