为什么 std::make_pair 是按值而不是常量引用获取输入

why std::make_pair is getting input by value instead of by const reference?

本文关键字:常量 获取 输入 引用 make std pair 为什么      更新时间:2023-10-16

参考这个网站 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 引用获取参数,但这引入了一些意想不到的问题。在缺陷报告后,它已更改为按值传递:

http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#181

预计编译器将内联函数,并能够在大部分时间优化传递的参数。

这样

std::make_pair( "abc", 3 )就可以了。 如果std::make_pair引用,则T1的推导类型将是char const[4],这将生成各种奇怪的错误消息,因为它不可复制。