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

函数参数:右值引用

右值引用

语法:int && a=320+250

&&不是与符号,也不是引用的引用,而是表示右值引用符号,用来指向右值

void  add(int &a)
{
    std::cout << a;
    return 0;
}
int main()
{
    int c = 12 + 11;
    add(11+11+c);
}

这种方式是错误的,因为引用实际上是指针,而11+11+c没有固定的内存,查看一下c+11+11的内存

    int c = 12 + 11;
00C04EAC  mov         dword ptr [c],17h  
    add(c+11+11);
00C04EB3  mov         eax,dword ptr [c]  
00C04EB6  add         eax,16h  
00C04EB9  push        eax  

从这里可以看出,第五行表示eax=eax+16h,所以这个11+11+c被放在了寄存器里面

左值和右值的区分

一种说法是等号左边的就是左值,右边的为右值,这种说法大部分情况都适用,另一种说法是有自己固定的内存,能往里面写入数据的称为左值,没有固定内存的,临时找了个内存,不能写入的称为右值,比如11+11+c不能再给它赋值了

举个简单的例子

struct Role
{
    int hp;
    int mp;
};
Role create()
{
    Role rt{ 00,100 };
    return rt;
}
void ShowRole(Role&& role)
{
    std::cout << role.hp;
}
int main()
{
    ShowRole(create());
    system("pause");
}

这种,第11行代码就要用到右值引用,这里create返回的是一个局部变量rt,下面用ShowRole接收后,,如果写成void ShowRole(Role  role),就相当于再声明一个Role来保存,就造成内存浪费,可以用右值引用,就相当于直接接收了rt


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

相关文章:

  • 编译pytorch——cuda-toolkit-nvcc
  • 【C语言】线程----同步、互斥、条件变量
  • C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序
  • linux删除用户
  • 解决 VSCode 调试时 Python 文件出现相对路径报错问题‘FileNotFoundError’
  • 《鸿蒙Next ArkTS:开启人工智能应用开发高效新旅程》
  • 【分布式】HLC 混合逻辑时钟
  • 45了解容器编排工具 Kubernetes 的基本概念和应用,包括 Pod、Service
  • 上传了ipa但在苹果App Store中没有看到构建版本的问题
  • Java对象回收
  • SpringCloud Alibaba 学习圣经,10万字实现 SpringCloud 自由
  • 蓝桥杯赛前冲刺-枚举暴力和排序专题2(包含历年蓝桥杯真题和AC代码)
  • Java阶段一Day18
  • 【华为机试真题详解JAVA实现】—简单错误记录
  • TCP协议内部工作机制一(确认应答,超时重传,连接管理)
  • 工作实战:Vue关于ElementUI二次封装的问题
  • 机器学习-卷积神经网络CNN中的单通道和多通道图片差异
  • C++ primer plus(第六版)编程练习答案 第13章 类继承
  • pytorch拓展——Ubuntu vscode配置pytorch C++拓展环境
  • docker-compose:Dockerfile参数以及说明
  • 【独家】华为OD机试 - 机智的外卖员(C 语言解题)动态规划
  • 前端已死?金三银四?你收到offer了吗?
  • 基于dbt的机器学习:流畅的过程衔接
  • 计算机网络基础
  • java servlet 期刊在线投稿系统jsp编程sqlserver数据库mvc模式开发计算机网页设计
  • js 作用域