【发布时间】:2014-07-26 10:04:32
【问题描述】:
我有一个关于函数模板参数类型推导程序的问题。
举个例子:
#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>,因此可以应用统一的初始化语义。我不知道的是类型推导发生的顺序。我非常感谢您提供有关此方面的一些信息。
提前致谢!
【问题讨论】:
-
有效吗?如果是这样,必须先扣除第一个。
标签: c++ templates c++11 type-deduction list-initialization