为什么 std::make_pair 是按值而不是常量引用获取输入
why std::make_pair is getting input by value instead of by const reference?
参考这个网站 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]
,这将生成各种奇怪的错误消息,因为它不可复制。
相关文章:
- constexpr 函数获取常量字符*
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- C++ 获取函数在常量引用中按值返回的结果
- 如何在常量计算表达式中获取编译时错误?
- C++ 获取向量中常量字符* [ ] 的长度
- 使用boost库(cpp_int)时获取常量时出错
- 获取模板以匹配常量 T* 和非常量 T* 的不同序列
- 你能安全地从字符串的 c_str() 常量字符*中获取指向字符串的指针吗?
- 获取对常量规范重载的成员函数的引用
- 如何从模板获取常量矢量元素的引用
- 使用 declval 获取非常量迭代器
- 我们可以获取子字符串的常量引用吗?
- 在 c++ 中获取常量字符 * 长度的最佳方法
- 在常量引用获取器上读取写入互斥锁(使用 Qt)
- 如何从对象中获取公共常量?
- 如何获取指向字符数组中第一个字符的常量指针
- 获取多重继承中基类的编译时常量偏移量
- 从dynamic_cast获取非常量引用
- 如何获取静态常量属性的地址?
- 如何从预定义常量中获取 #define 符号而不是值