Raz*_*ius 4 c++ move-semantics
假设我正在实现一个集合并且我想向它添加一个元素,例如。
template <typename T>
class MyCollection
{
void add(const T& element);
};
Run Code Online (Sandbox Code Playgroud)
现在,由于添加元素通常意味着复制它,出于效率原因,使用以下版本的 add 也是有意义的void add(T&& element)。现在的问题是,显然这两个函数的代码是完全一样的,只是参数类型不同。目前我对 C++ 的掌握是有限的,但我想知道是否有一种简单而惯用的方法来编写add一次函数而无需重写两次?
事实上,这是通过定义一个重载来解决的:
void add(T element) {
where_it_is_actually_stored.insert(std::move(element));
}
Run Code Online (Sandbox Code Playgroud)
接下来,根据您是添加左值、由移动的左值生成的右值还是临时对象,编译器将解析适当的构造函数,以便复制或移动您的值参数。
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |