为什么std :: make_pair是通过值而不是const引用获取输入?

时间:2012-03-16 11:57:33

标签: c++

参考此网站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引用?

这有什么特别的原因吗?

2 个答案:

答案 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],这会生成各种奇怪的错误消息,因为它不可复制。