为什么push_back对左值和右值有两个重载?

时间:2013-01-26 07:50:51

标签: c++ c++11 move-semantics

为什么类/函数有两个重载,一个用于左值,一个用于右值?

例如,来自this视频,它说vector<T>::push_back

我们有两个重载
void push_back( const T& value );
void push_back( T&& value );

为什么我们不能只按值重载一次

void push_back( T value );

如果是左值,则会复制值,如果是左值,则会移动值。这不是它的工作方式和标准保证吗?

2 个答案:

答案 0 :(得分:8)

使用您的按价值命题,技术上会有复制+移动或移动+移动,而其他两个重载则只有一个副本或一个移动。

答案 1 :(得分:5)

除了其他人提到的要点外,它还需要更改旧界面。而且有时候这是不可接受的。