gpt4 book ai didi

c++ - make_pair 如何知道其参数的类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:26:11 33 4
gpt4 key购买 nike

MSVC++“实用程序” header 中 make_pair 的定义是:

template<class _Ty1, class _Ty2> inline pair<_Ty1, _Ty2> make_pair(_Ty1 _Val1, _Ty2 _Val2) { // return pair composed from arguments return (pair<_Ty1, _Ty2>(_Val1, _Val2)); }

尽管没有将参数类型放在尖括号中,但我一直使用 make_pair:

    map<string,int> theMap ;    theMap.insert( make_pair( "string", 5 ) ) ;

我不应该告诉 make_pair 第一个参数是 std::string 而不是 char* 吗?

它怎么知道的?

最佳答案

函数模板调用通常可以通过参数推导来避免显式模板参数(即 make_pair<…> ),这是由 C++03 §14.8.2 定义的。摘录:

When a function template specialization is referenced, all of the template arguments must have values. The values can be either explicitly specified or, in some cases, deduced from the use.

具体规则有点复杂,但通常情况下,只要您只有一个通常足够合格的专业,它就“有效”。

您的示例使用了两个推导步骤和一个隐式转换。

  • make_pair返回 pair<char const*, int> ,
  • 然后 template<class U, classV> pair<string,int>::pair( pair<U,V> const & )U = char*, V = int开始并执行成员初始化,
  • 调用string::string(char*) .

关于c++ - make_pair 如何知道其参数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671460/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com