关于标准库中的pair的创建,为什么还要以个make_pair函数来创建pair对象呢?

zhangjundriver 2008-12-02 11:03:56
在标准库中,作为模板的pair中,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));
}
为什么还要这样的函数呢,难道直接定义对象不行吗?
另外,调用该函数,需要函数调用的开销(当没有被内联的时候),而且里面要构造函数,和返回是的拷贝构造的调用也是开销,比较起直接的构造效率差多了啊。
我想不通为什么还用用这个函数来创建pair对象
请大家指导指导。。
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim_King_2000 2008-12-02
  • 打赏
  • 举报
回复
inline函数不会带来调用开销。用helper function是因为函数能够自动推演模板参数,而模板类做不到。
taodm 2008-12-02
  • 打赏
  • 举报
回复
1你总能知道模板参数类型么?很多时候你只有2个变量名。
2构造函数可以推迟调用么?make_pair则可以取得其指针。
yndfcd 2008-12-02
  • 打赏
  • 举报
回复
直接调用构造函数要指定模板参数.而make_pair不需要指定模板参数.
claymost 2008-12-02
  • 打赏
  • 举报
回复
原型是这样定义的吧
应该不存在构造函数上的效率问题
由于编译器的优化特性,函数返回直接构造一个临时对象,而不存在拷贝构造的问题

template <class T1, class T2>
inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
return pair<T1, T2>(x, y);
}

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧