空列表迭代器比较始终为true

pol*_*oig 2 c++ iterator list

我正在使用以下代码测试空列表的列表迭代器:

#include <iostream>
#include <list>


int main(){
    std::list<int> l;
    bool a, b, c;
    std::list<int>::iterator i = l.begin();
    a = i == --l.end();
    b = ++i == l.end();
    c = ++i == l.end();
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    std::cout << c << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

结果

1
1
1
Run Code Online (Sandbox Code Playgroud)

三个bool的结果总是正确的,但是我正在增加和减少迭代器,为什么它们总是指向同一个地址

Bau*_*gen 7

这只是未定义的行为,因为不允许以一种使它们超出基础范围的方式递增或递减迭代器.

由于在这种情况下范围是空的,因此所有三个操作都是非法且不正确的.