c++ - 如何定义一个函数来处理 move 语义和复制语义?

标签 c++ move-semantics

假设我正在实现一个集合并且我想向它添加一个元素,例如。

template <typename T>
class MyCollection
{
    void add(const T& element);
};

现在,由于添加元素通常意味着复制它,出于效率的原因,让
添加以下版本 void add(T&& element) .现在的问题是,显然这两个函数的代码是完全一样的,只是参数类型不同。目前我对C++的掌握有限,但我想知道是否有一种简单而惯用的方式来编写add函数一次而不重写两次?

最佳答案

事实上,这是通过定义一个重载来解决的:

void add(T element) {
    where_it_is_actually_stored.insert(std::move(element));
}

接下来,根据您是添加左值、由 move 的左值生成的右值还是临时对象,编译器将解析适当的构造函数,以便复制或 move 您的值参数。

关于c++ - 如何定义一个函数来处理 move 语义和复制语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467791/

相关文章:

C++在库之间混合新/删除?

c++ 删除 move 赋值运算符编译问题

c++ - 无限制 union 的 move 构造函数因 invalid_pointer 而崩溃

c++ - 根据数据包类型更改行为,避免 switch 语句

c++ - 使用 for_each 与 range-for 有什么好处?

c++ - 如何保存这个 vector 图

c++ - 不匹配 'operator+='(操作数类型为 'std::basic_ostream<char>' 和 'int')

c++ - C++11 编译器何时会使 RVO 和 NRVO 优于 move 语义和 const 引用绑定(bind)?

rust - 为什么可变引用没有移到这里?

c++ - 与 move 构造函数混淆 : unable to call move constructor