在我的设置上运行它:
vector<int> myvector;
for (int i=1; i<=5; i++) myvector.insert(myvector.end(),i);
vector<int>::iterator it;
for ( it=myvector.begin() ; it < myvector.end()+2; it++ )
cout << " " << *it;
产量:
1 2 3 4 5 0 0
我原以为尝试取消引用超出范围的迭代器会导致段错误。但它似乎产生了向量中包含的类型的空对象或默认初始化对象。
这是明确定义的行为吗?这个属性是从哪里来的,来自迭代器还是来自向量?迭代器是否在某种意义上捕获了超出范围的异常并返回一个空对象?
我尝试在 C++11 参考中找到它,但感觉有点过头了。