【发布时间】:2018-07-10 03:32:43
【问题描述】:
std::list 的方法 insert() 有 2 个方法签名。一个是这样的 const 左值引用:
iterator insert( const_iterator pos, const T& value );
另一个采用右值引用:
iterator insert( const_iterator pos, T&& value );
- 但是我想知道为什么第二个方法签名甚至是必要的?一个 const 左值引用可以绑定到右值。
我知道移动右值可能比复制它们更快。
- 但是,采用右值引用的第二个方法签名将如何在
value上实现与采用 const 左值引用的第一个不同的移动指令?
右值上的赋值运算符将简单地调用移动构造函数,而在左值上它将调用复制构造函数。所以简单地在第一个函数中使用赋值运算符就足够了?
谢谢
【问题讨论】:
-
第二个签名有一个右值引用,而不是一个通用引用。
-
@n.m.啊,好吧,我编辑了这个问题。但是我的问题仍然存在,第二种方法与第一种方法的实施方式有何不同?由于右值上的赋值运算符将简单地调用移动构造函数,而在左值上它将调用复制构造函数。所以简单地在第一个函数中使用赋值运算符就足够了?
标签: c++ rvalue-reference