This question already has an answer here:
What are template deduction guides and when should we use them?
(1个答案)
2年前关闭。
我在Visual Studio c++ 2017中尝试了这个,它有效
我认为应该
为什么这里不需要模板?
表达式
触发类模板参数推论时,编译器将查找编译器生成的和用户编写的推论指南,并发现上述推论指南。该推导指南告诉编译器根据构造函数自变量
另请参阅:
Class template argument deduction(since C++17) - cppreference.com deduction guides for std::pair - cppreference.com c++ - What are template deduction guides and when should we use them? - Stack Overflow cpp-docs/visual-cpp-language-conformance.md at master · MicrosoftDocs/cpp-docs · GitHub
(1个答案)
2年前关闭。
我在Visual Studio c++ 2017中尝试了这个,它有效
auto a = pair(1.0, 2);
我认为应该
auto a = pair<double, int>(1.0, 2);
为什么这里不需要模板?
最佳答案
它是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
推导double
为T2
和int
为(1.0, 2)
。另请参阅:
08-26 18:17