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

Why does push_back have two overloads for lvalues and rvalues?

本文关键字:重载 两个 push back 为什么      更新时间:2023-10-16

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

例如,从这个视频中,它说我们有两个重载vector<T>::push_back

void push_back( const T& value );
void push_back( T&& value );

为什么我们不能只有一个重载的值,

void push_back( T value );
如果它是左值,则将

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

对于您的按价值主张,从技术上讲,会有复制+移动或移动+移动,而对于其他两个重载,则有一个副本或单个移动。

除了其他人提到的一点之外,它还需要更改旧界面。有时这是完全不能接受的。