参考此网站http://www.cplusplus.com/reference/std/utility/make_pair/
std :: make_pair具有此签名(以及可能的实现):
template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return ( pair<T1,T2>(x,y) );
}
我想知道为什么std :: make_pair有值输入参数而不是const引用?
这有什么特别的原因吗?
答案 0 :(得分:6)
最初是通过const引用获取参数,但这引入了一些意想不到的问题。在缺陷报告之后,它被更改为按值传递:
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#181
预计编译器将内联函数并能够在大多数时间内优化掉参数。
答案 1 :(得分:3)
这样std::make_pair( "abc", 3 )
就可以了。如果std::make_pair
接受了引用,则T1
的推导类型将为char const[4]
,这会生成各种奇怪的错误消息,因为它不可复制。