我试图运行下面的代码来检查迭代器的可访问性:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> n = {1,24,5,4};
vector<int> :: iterator itr;
itr = n.begin();
for(;;itr++){
cout<<*itr<<endl;
}
return 0;
}
该程序最后执行并退出分段错误。我从中了解到,在某些迭代中,迭代器返回的值在其边界之外为零,并且在该程序崩溃之后。我想知道当我们访问其边界外的迭代器时会发生什么,如果它像指针一样,它指向什么?
任何事情都可能发生。它是未定义的行为,编译器不需要执行任何特定的操作。实际上,允许将整个程序视为无效,并且如果程序在任何地方包含UB,则会发出它想要的任何代码。
一旦你破坏了语言的规则(比如解除引用指向超出界限的迭代器),你就离开了定义良好的C ++领域,你就不再对行为将有任何期望。