【发布时间】:2010-11-14 11:26:19
【问题描述】:
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);
我在这里想要的是迭代器的 NULL 值,但我不确定它是否合法。在 Visual Studio 2008 中包含的 STL 实现中,它们在 std::list 的 operator==() 中包含了排除这种用法的断言。 (他们检查每个迭代器是否由同一个容器“拥有”,并且默认构造的迭代器没有容器。)这暗示它不合法,或者他们可能过于热心。
【问题讨论】:
-
boost::optional<std::list::iterator>浮现在脑海中。
标签: c++ visual-studio-2008 stl iterator