为什么push_back有两个重载左值和右值
Why does push_back have two overloads for lvalues and rvalues?
为什么一个类/函数有两个重载,一个用于左值,一个用于右值?
例如,从这个视频中,它说我们有两个重载vector<T>::push_back
void push_back( const T& value );
void push_back( T&& value );
为什么我们不能只有一个重载的值,
void push_back( T value );
如果它是左值,则将复制值,如果它是右值,则将移动值。这不是它的工作方式和标准保证的方式吗?
对于您的按价值主张,从技术上讲,会有复制+移动或移动+移动,而对于其他两个重载,则有一个副本或单个移动。
除了其他人提到的一点之外,它还需要更改旧界面。有时这是完全不能接受的。
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 重载运算符 (<<) cout 在 c ++ 中不起作用,当我互相减去两个矩阵时不起作用
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 使用运算符重载的两个复数的总和
- 为什么我不能用两个参数重载 C++ 运算符 []?
- 两个相同的重载运算符[]一个返回引用
- C++stoi:这两个重载都无法转换所有参数类型
- 重载 == 以递归方式比较两个链表
- 如何在两个不同的类之间重载"=="运算符?
- 当我有两个对象时<<如何重载运算符?(有关系)
- 如何使用运算符重载来简化两个分数的添加
- 如何重载运算符 += 以添加两个类对象
- 我重载了一个运算符*()函数来计算两个矩阵的总和,但编译器提示此错误
- 添加两个具有运算符重载的数组对象,从而导致分段错误
- C++ 重载运算符 - 减去两个相同类型的对象
- 重载模板运算符 = 对于两个模板:template<...> A = template<...> B 反之亦然
- 为什么 std::p romise::set_value() 有两个重载
- 如何在C++中重载两个不同的 I/O 运算符