8

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

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

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

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

void push_back( T value );

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

4

2 回答 2

8

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

于 2013-01-26T07:56:09.800 回答
5

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

于 2013-01-26T07:59:12.417 回答