首页 > 解决方案 > 为什么pair在初始化中不需要类型

问题描述

我在 Visual Studio c++ 2017 中尝试了这个,它可以工作

auto a = pair(1.0, 2);

我认为应该是

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

为什么这里不需要模板?

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

解决方案


这是 C++17 的一个新特性,称为类模板参数推导。简而言之,此功能允许您在声明类模板实例的对象时省略类模板的模板参数,并让编译器推导出参数。

std::pair在标准库中有一个演绎指南,如下所示:

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

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

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

另见:


推荐阅读