gpt4 book ai didi

c++ - {} 是传递给需要迭代器(代表某个容器的 std::end() )的函数的有效参数吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:30 25 4
gpt4 key购买 nike

boost directory_iterator example - how to list directory files not recursive(参见 this answer)中是示例代码

#include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>
#include <iostream>

...
using namespace boost::filesystem;

for(auto& entry : boost::make_iterator_range(directory_iterator(p), {}))
{
std::cout << entry << "\n";
}

(pboost::filesystem::path 类型。)

在查看 documentation for make_iterator_range 时,我认为被调用的构造函数是这个:

template< class ForwardTraversalIterator >
iterator_range< ForwardTraversalIterator >
make_iterator_range( ForwardTraversalIterator Begin,
ForwardTraversalIterator End );

如果我是对的,那么上面代码示例中传递的第二个参数 {} 似乎对应于 directory_iterator< 不可见迭代的任何容器的末尾.

我以前从未见过这个。

是否可以仅通过从空初始化列表 {} 值构造此类迭代器来构造 end 迭代器? (我的措辞是否正确?)

我不介意有人说出幕后发生的事情,因为这样构造的迭代器的类型必须与第一个迭代器的类型匹配(directory_iterator( p))。 (这里是模板参数推导吗?)

最佳答案

是的,它是有效的。

除了您已经通常调用的之外,没有模板参数推导:您的第一个参数是 directory_iterator 类型,因此该函数是这样实例化的。

接下来,除了模板,现在您正在调用一个函数,该函数采用两个 directory_iterators:{} 可以初始化一个directory_iterator 在那一点上,因为那是你的函数 [template instance] 所采用的。因此,在这种情况下,编写 {} 在功能上等同于编写 directory_iterator{}

如果 directory_iterator 无法从 {} 构建,您的程序将无法编译。

关于c++ - {} 是传递给需要迭代器(代表某个容器的 std::end() )的函数的有效参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com