std::list 的两个 insert() 方法签名之间的实现差异

Difference in implementation between two insert() method signatures for std::list

std::list 的方法 insert() 有 2 个方法签名。一个 const 左值引用是这样的:

iterator insert( const_iterator pos, const T& value );

另一个采用右值引用:

iterator insert( const_iterator pos, T&& value );
  1. 但是我想知道为什么第二个方法签名是必要的? const 左值引用可以绑定到右值。

我知道移动右值比复制右值可能更快。

  1. 但是,采用右值引用的第二个方法签名将如何在 value 上实现与采用 const 左值引用的第一个不同的移动指令?

右值上的赋值运算符将简单地调用移动构造函数,而在左值上它将调用复制构造函数。因此,只需在第一个函数中使用赋值运算符就足够了吗?

谢谢

首先,这里的T&&不是通用引用,而是右值引用,因为T在函数调用的时候并没有被推导。目前已知 class 模板被实例化。

However I was wondering why the second method signature was even necessary? A const lvalue reference can bind to rvalues.

利用移动语义。采用右值引用启用移动操作。

However, how will the second method signature that takes a rvalue reference implement a move instruction on value that differs from the first that takes a const lvalue reference?

区别是:取const左值引用根本不能移动;只有取右值引用才能移动