为什么配对在初始化时不需要类型

时间:2018-07-13 03:55:17

标签: c++ visual-studio c++17 std-pair

我在Visual Studio c ++ 2017中尝试了此方法,

auto a = pair(1.0, 2);

我认为应该是

auto a = pair<double, int>(1.0, 2);

为什么这里不需要模板?

1 个答案:

答案 0 :(得分:1)

它是C ++ 17的新功能,称为class template argument deduction。简而言之,此功能允许您在声明类模板实例的对象时省略类模板的模板参数,并让编译器推论这些参数。

std::pair has a deduction guide in the standard library如下:

template<class T1, class T2>
pair(T1, T2) -> pair<T1, T2>;

表达式pair(1.0, 2)是一个函数样式的强制转换表达式,没有显式模板参数列表,这是类模板参数推导的几种触发之一。

当触发类模板参数推论时,编译器将查找编译器生成的和用户编写的推论指南,并发现上述推论指南。该推论指南告诉编译器根据构造函数参数T1推论doubleT2int(1.0, 2)

另请参阅: