【问题标题】:why std::make_pair is getting input by value instead of by const reference?为什么 std::make_pair 通过值而不是 const 引用获取输入?
【发布时间】:2012-03-16 11:57:32
【问题描述】:

参考本网站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 引用输入参数?

有什么特别的原因吗?

【问题讨论】:

  • 有趣的是sgi.com/tech/stl/pair.html make_pair 按值接受参数,但标准将它们定义为按值传递
  • 它是all better in C++11。你所有的担忧都是短暂的,很快就会变得无关紧要。
  • 来自同一页面“如果相应的类型可以隐式转换,则可以从包含不同类型的其他对对象复制构造对对象。”

标签: c++


【解决方案1】:

它原本是通过 const 引用来获取参数的,但这引入了一些意想不到的问题。缺陷报告后改为按值传递:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 2015-03-24
      • 2020-03-24
      • 2013-11-06
      相关资源
      最近更新 更多