Adr*_*ian 11 c++ iterator stl visual-studio-2008
C++标准是否说我应该能够比较两个默认构造的STL迭代器是否相等?默认构造的迭代器是否具有可比性?
我想要以下,使用std :: list作为例子:
void foo(const std::list<int>::iterator iter) {
if (iter == std::list<int>::iterator()) {
// Something
}
}
std::list<int>::iterator i;
foo(i);
Run Code Online (Sandbox Code Playgroud)
我想要的是迭代器的NULL值,但我不确定它是否合法.在Visual Studio 2008附带的STL实现中,它们在std :: list的operator ==()中包含断言以排除此用法.(他们检查每个迭代器是否由同一个容器"拥有",并且默认构造的迭代器没有容器.)这暗示它不合法,或者可能是他们过于热心.
小智 15
好的,我会采取刺.C++标准,第24.1/5节:
迭代器也可以具有与任何容器无关的奇异值.[示例:在声明未初始化的指针x(与int*x;一样)之后,必须始终假定x具有指针的奇异值.]对于奇异值,大多数表达式的结果都是未定义的; 唯一的例外是将非奇异值赋值给具有奇异值的迭代器.
所以,不,他们无法比较.
这将在C++ 14中发生变化.[forward.iterators] N3936的24.2.5p2说
但是,可以比较值初始化的迭代器,并且它们应该与相同类型的其他值初始化迭代器进行比较.
归档时间: |
|
查看次数: |
2193 次 |
最近记录: |