c++ - 为什么pair在初始化中不需要类型
问题描述
我在 Visual Studio c++ 2017 中尝试了这个,它可以工作
auto a = pair(1.0, 2);
我认为应该是
auto a = pair<double, int>(1.0, 2);
为什么这里不需要模板?
解决方案
这是 C++17 的一个新特性,称为类模板参数推导。简而言之,此功能允许您在声明类模板实例的对象时省略类模板的模板参数,并让编译器推导出参数。
std::pair
在标准库中有一个演绎指南,如下所示:
template<class T1, class T2>
pair(T1, T2) -> pair<T1, T2>;
该表达式pair(1.0, 2)
是一个没有显式模板参数列表的函数式强制转换表达式,它是类模板参数推导的几个触发器之一。
当触发类模板参数推导时,编译器查找编译器生成和用户编写的推导指南,并发现上述推导指南。本推导指南告诉编译器根据构造函数参数推导T1
asdouble
和T2
as 。int
(1.0, 2)
另见:
推荐阅读
- regex - 仅在正则表达式中分出非字母数字字符
- linux - Fork() 带有信号的子进程
- javascript - 多个 jQuery 移动页面上的 Google 地图
- drag-and-drop - 使用角度和角度材料cdk拖放实现应用程序
- ruby-on-rails - Rails flash.notice在重新加载后短暂出现
- php - 带有 PHP 的子目录的 Nginx 配置返回 404
- java - JavaFX 任务线程显然没有同时运行
- r - 除了一个函数加载一个包
- linux - 文件的绝对路径作为bash中的变量
- reactjs - 使用 tsconfig.json 忽略 *.js 和 *.jsx 文件