当前位置: 首页 > article >正文

C++ | 表示移动函数move()的基本用法

在面向对象编程中,如果想拷贝一个外部传来的二维数组(不希望将其返回),又不想直接开新数组for循环赋值(导致TLE),你会怎么做呢?

move函数无条件将其自变量强制转换为右值引用,从而表示其可以移动(如果其类型支持移动)。

马++真是贻害无穷啊

头文件

utility(需要使用命名空间std)。


定义

move函数源码如下:

_EXPORT_STD template <class _Ty>
_NODISCARD _MSVC_INTRINSIC constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept {
    return static_cast<remove_reference_t<_Ty>&&>(_Arg);
}
  • 参数类型是模版,参数Arg是要强制转换的自变量。 虽然Arg的类型看起来指定为右值引用,但move也接受左值参数,原因是左值引用可以绑定到右值引用。
  • 返回值:作为右值引用Arg,无论其类型是否是引用类型。

通过函数定义可以看出,move函数没有进行移动操作,而是返回类型转换后的参数。


应用

示例如下,该程序在终端中打印“114”。

#include<iostream>
#include<vector>
#include<utility>
using namespace std;
class solution{
public:
	void init(vector<vector<int> > &a){
		this->b=move(a);
	}
	void solve(){
		cout<<b[0][0];
	}
private:
	vector<vector<int> > b;
};
int main()
{
	vector<vector<int> > v={{114,514}};
	solution s;
	s.init(v);
	s.solve();
	return 0;
}

注意

move函数拷贝完成后,原对象会被销毁。即在上述代码的最后加上如cout<<v[0][0];语句会出现运行时异常。



http://www.kler.cn/a/388212.html

相关文章:

  • 无人机动力测试台如何快速外接第三方传感器
  • 深度学习服务器租赁AutoDL
  • 11.11比赛总结
  • 基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
  • 介绍几个提取视频文案的Coze插件
  • Chapter 4 虚拟机性能监控、故障处理工具
  • 【Golang】Go语言教程
  • 【leetcode练习·二叉树】用「分解问题」思维解题 I
  • mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了
  • 【前端】JavaScript 方法速查大全-DOM、BOM、时间、处理JS原生问题(三)
  • C++学习笔记----11、模块、头文件及各种主题(一)---- 模板概览与类模板(1)
  • python opencv灰度变换
  • Docker部署Oracle 11g
  • selinux与防火墙
  • 【1】虚拟机安装
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-vLLM集成(四)
  • 快速傅里叶变换(FFT)基础(附python实现)
  • Go语言异常处理
  • Windows配置NTP时间同步
  • Docker:镜像构建 DockerFile
  • Spring 配置绑定原理分析
  • 安全编码实践:反射API的“间谍游戏”
  • java-web-web后端知识小结
  • 让金融数据处理更精准-C#银行回单识别集成示例、回执单识别
  • GNU/Linux - /proc/sys/vm/overcommit_memory
  • 《Python 与 SQLite:强大的数据库组合》