5

我知道这听起来很愚蠢,但看看这个简单的例子(工作目录应该有不止一项):

#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <cassert>

int main()
{
    using namespace boost::filesystem;
    directory_iterator it("./");
    directory_iterator it_copy = it;
    ++it;
    assert(it_copy != it);
    return 0;
}

it_copy一起修改it!(提升 1.45)哪些考虑因素会导致这种设计(directory_iterator类似于 smart ptr)?

我只需要保存一个副本directory_iterator以供以后使用。

4

1 回答 1

6

如果您查看参考资料,您会注意到它被宣传为boost::single_pass_traversal_tag.

这与 STL 中的Input Iterator等效(在 boost 术语中)(将其视为从网络连接传递数据包的迭代器,您无法回退)。

另请注意(来自同一页面):

i == j并不意味着++i == ++j

说到这里,可能有人会疑惑为什么可以复制。原因是 STL 算法已经设定了通过复制获取参数的规范。因此,如果无法复制,它将无法与 STL 算法一起使用。

于 2011-03-21T17:38:24.663 回答