Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么配对不';初始化时不需要类型_C++_Visual Studio_C++17_Std Pair - Fatal编程技术网

C++ 为什么配对不';初始化时不需要类型

C++ 为什么配对不';初始化时不需要类型,c++,visual-studio,c++17,std-pair,C++,Visual Studio,C++17,Std Pair,我在VisualStudioC++ 2017中尝试,它工作 auto a = pair(1.0, 2); 我想应该是这样 auto a = pair<double, int>(1.0, 2); autoa=pair(1.0,2); 为什么这里不需要模板?这是C++17的一个新特性,称为。简而言之,此功能允许您省略类模板的模板参数,并允许编译器在您声明类模板实例的对象时推断参数 看起来是这样的: template<class T1, class T2> pair(T1

我在VisualStudioC++ 2017中尝试,它工作

auto a = pair(1.0, 2);
我想应该是这样

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

为什么这里不需要模板?

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

看起来是这样的:

template<class T1, class T2>
pair(T1, T2) -> pair<T1, T2>;
模板
配对(T1,T2)->配对;
表达式
对(1.0,2)
是一个函数样式的强制转换表达式,没有显式的模板参数列表,它是类模板参数推断的几个触发器之一

当触发类模板参数推断时,编译器将查找编译器生成的和用户编写的推断指南,并发现上述推断指南。此演绎指南告诉编译器根据构造函数参数
(1.0,2)
T1
演绎为
double
,将
T2
演绎为
int

另见:


    • 你是说
      std::make\u pair
      ?已经有了。1.0是一个
      double
      2
      是一个
      int
      。这些类型是从参数中推导出来的。@WhozCraig我使用pair。可以为类推导类型吗?我认为它只是用于函数。请看:感谢@NickyC为我节省了链接的时间。道具!现在我看到你的问题与类型演绎关系不大,而与演绎发生的背景关系更大。我掩盖了你的参考资料。Nicky应该将其作为一个简短描述的答案发布(除非有重复的地方;如果有,我还没有看到)。你不再需要这个丑陋的
      。这是C++17的卖点之一。