2012-03-16 89 views
6

参照本网站http://www.cplusplus.com/reference/std/utility/make_pair/为什么std :: make_pair通过值而不是通过const引用获取输入?

性病:: 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的值具有输入参数,而不是常量参考?

这有什么特别的理由吗?

+0

有趣的是,http://www.sgi.com/tech/stl/pair.html make_pair通过值获取参数,但标准将它们定义为按值传递 – 2012-03-16 12:05:18

+0

它[在C++ 11中更好](http ://en.cppreference.com/w/cpp/utility/pair/make_pair)。你所有的担忧都是暂时的,并且很快就无关紧要。 – 2012-03-16 12:15:43

+0

“如果对象类型可以隐式转换,则可以从包含不同类型的其他对象中复制构建对象对象。” – PermanentGuest 2012-03-16 12:22:40

回答

3

因此,std::make_pair("abc", 3)将工作。如果std::make_pair作为参考,T1的推导类型将为char const[4],这将产生各种奇怪的错误消息,因为它不可复制。