c++ - 定义 set 方法的 const& 和 && 版本时的最佳实践是什么?
问题描述
如果我想为 std::vector 成员(或可移动对象)定义一个像 setter 这样的方法,我可以这样做:
void set(const std::vector<int>& v) { _v = v; }
但我也需要添加
void set(std::vector<int>&& v) { _v = std::move(v); }
正确的?为了处理可以移动的临时对象,最好同时定义两者吗?所以所有的二传手都会翻倍?谢谢。
解决方案
如果您知道该类型具有有效的移动构造函数(std::vector<int>
确实如此),那么您可以按值获取并从参数中移动:
void set(std::vector<int> v) { _v = std::move(v); }
这样,当使用左值调用时,它将被复制,但当使用右值调用时,它将被移动。
推荐阅读
- javascript - CSS 加载 Base64 编码图像作为背景 URL
- python - 为什么我的本地 html 加载到 PySide6 QWebEngineView 时无法访问?
- google-docs - Google Docs 中的权限表
- java - 执行编译的jar文件时出错
- macos - 如何有效地将 utf-8-mac 转换为 utf
- flutter - 将颤振小部件提取到新文件中的快捷方式
- docker - 我的 docker 容器和本地网络计算机之间的 Https,稍后部署到 Raspberry Pi?
- reactjs - 如何防止在 React 中添加新元素时重新渲染整个列表
- tensorflow - 如何在训练 TensorFlow Lite 模型时删除数据集中可能导致错误的元素
- c++11 - 将全局变量成员的指针发送到 WinHttpQueryHeaders (WinHTTP API) 不会改变它的值