我有一个关于函数模板参数类型推导程序的问题。
举个例子:
#include <vector>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>
int main()
{
std::ifstream file("path/to/file");
std::vector<int> vec(std::istream_iterator<int>{file},{}); // <- This part
return 0;
}
如果我理解正确,则推断第二个参数std::istream_iterator
是调用默认构造函数的类型。
适当的std::vector
构造函数声明为:
template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
由于第一个参数类型被推导为std::istream_iterator<int>
第二个参数也被推导std::istream_iterator<int>
,因此可以应用统一的初始化语义。我不知道的是类型推导发生的顺序。我真的很感激这方面的一些信息。
提前致谢!