当std :: iterator在其边界(end)之外访问时会发生什么?

问题描述 投票:-4回答:1

我试图运行下面的代码来检查迭代器的可访问性:

#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;
} 

该程序最后执行并退出分段错误。我从中了解到,在某些迭代中,迭代器返回的值在其边界之外为零,并且在该程序崩溃之后。我想知道当我们访问其边界外的迭代器时会发生什么,如果它像指针一样,它指向什么?

c++ vector stl iterator
1个回答
1
投票

任何事情都可能发生。它是未定义的行为,编译器不需要执行任何特定的操作。实际上,允许将整个程序视为无效,并且如果程序在任何地方包含UB,则会发出它想要的任何代码。

一旦你破坏了语言的规则(比如解除引用指向超出界限的迭代器),你就离开了定义良好的C ++领域,你就不再对行为将有任何期望。

© www.soinside.com 2019 - 2024. All rights reserved.