- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
我正在尝试键入别名 std::make_pair 函数以将其用作 abc::make_pair 函数。 auto(*make_pair)() = std::make_pair; namespace a
通常是 =在变量声明中,编译器将其视为移动构造。例如: vector foo = vector(13, 0); 将调用vector::vector(vector&&)构造函数。 这如何与 make_p
我已经用过typedef typedef std::pair coords; typedef std::pair fcoords; 然后创建此数据类型的 vector std::vector open
用std::make_pair there is only one implementation C++14 onwards templateconstexpr std::pair make_pair
我有一个这样的 map (第一个和第二个参数都是唯一的): std::map mapTest; mapTest.insert(make_pair(1, 101)); mapTest.insert(ma
make_pair 可以在不提及类型的情况下创建对。我想对我的类使用相同的技巧,但它继承自 boost::noncopyable,因此无法编译: template struct bit_writer
std::pair currentData; void OnCallback() { Object object = getObject(); OtherObject* otherOb
这个问题在这里已经有了答案: C++11 make_pair with specified template parameters doesn't compile (1 个回答) 关闭 9 年前。
MSVC++“实用程序” header 中 make_pair 的定义是: template inline pair make_pair(_Ty1 _Val1, _Ty2 _Val2) { // re
如果我从不同的范围将它插入到 map 中,是否需要分配一对? #include #include #include #include using namespace std; void par
在我最近编写的代码中,我注意到一个奇怪的行为。 当我使用第一个参数为 std::pair 的 make_pair 时,make_pair 变得“神奇地”在命名空间中可用(我不必使用 std:: 限定符
我有以下代码 #include using namespace std; int a = ...//gets calculated somehow
我正在尝试用 SDL_ttf 制作一个字体字典,就像我用 SDL_image 制作一个字典一样。由于字体是用 pnt_size 存储的,所以我制作了一个包含此信息的结构: struct fon
众所周知,make_pair 推导类型。这就是它存在并且方便的原因。现在看到这个 example : std::pair foo; std::pair bar; foo = std::make_p
考虑这个函数: std::pair getPair() { return std::make_pair(0, 0); } 为什么会编译? 不应该make_pair返回 std::pair这与
使用make_pair后,我得到了一些pairToCount 在这种格式中(元素 1 元素 2)= Db 中的频繁数: (1 2) = 1 (1 3) = 1 (1 4) = 1 (2 3) = 2
设计用于利用模板推导来实例化其模板类拷贝的函数类型有一个正式名称。 std::make_pair 是此类方法的主要示例。想到了术语“辅助方法”,但我记得还有一个更具体的术语……我就是想不起来了。 最佳
我在阅读图书馆的代码库时遇到了以下问题。 errorMap,在下面的代码中使用定义为: map > errorMap; 代码的相关部分是: errorMap["substitutions"] += m
我遇到了一些奇怪的事情,我想得到解释。以下代码片段提供了一个简单的类模板 type和两个 operator #include template class type { public: T v
我在使用模板成员重载运算符和使用 make_pair 时遇到了一些问题: class MyArchive { public: template MyArchive & operato
我是一名优秀的程序员,十分优秀!