为什么对在初始化中不需要类型[重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

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

auto a = pair(1.0, 2);

我认为应该是

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

为什么这里不需要模板?

c++ visual-studio c++17 std-pair
1个回答
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推导为doubleT2,因为int基于构造函数参数(1.0, 2)

另见:

© www.soinside.com 2019 - 2024. All rights reserved.