首页 > 其他分享 >引用

引用

时间:2024-05-07 13:33:06浏览次数:21  
标签:函数 右值 左值 构造 引用 拷贝

左值  右值   (纯右值,将亡值)             

可以在等号左边

只能在等号右边
能够取到地址 不能取地址
具名 不具名

1. 变量名

2.返回左值引用的函数

3.解引用   (*this)

4. ++i是左值

5. 声明出来的左值引用

6.右值引用

1.返回非引用类型的函数调用 (int func(void))

2.i++ 是纯右值

3. 算术,逻辑,比较表达式

4.将亡值:触发移动构造 或者 移动赋值构造,并资源转移,接着该值会调用析构函数

 

左值引用可以指向右值。 const int & , 不能修改这个值。

右值引用        int &&      为了解决能够修改这个值。

 

将左值改成右值。 std::move(v)

 

类对象有堆栈资源, 需要进行深拷贝。

A a ,b   

a=b   // 移动构造

---------

A a;

A b(a);  //拷贝构造

A c(std::move(a));  // 右值构造    对象赋值,避免对象的重新分配。 减少一次深拷贝,在创建对象的时候,直接将原先的数据地址进行转移。

 

移动构造,就是来解决,深拷贝的。

 

    避免对象拷贝

左值引用 右值引用

函数传参数

函数返回值

实现移动语义

实现完美转发 (在模板函数中,不改变原有的左右值属性,可以将自己的参数,完美的转给内部调用的其他函数)

 

借用万能引用func(T &&t){     //引用折叠,完美转发
f(std::forward<T>{t})
}

 

 

 

https://www.bilibili.com/video/BV14z4y1B7bd?p=2&vd_source=070088cf37075da9bc162f2560ec50eb

标签:函数,右值,左值,构造,引用,拷贝
From: https://www.cnblogs.com/yuguangyuan/p/18176936

相关文章

  • C#配置程序引用的dll的位置
    在C#程序的App.config配置第三方dll的位置,使得C#程序可以自动加载子目录下的dll。参考博客:https://blog.csdn.net/qq_43307934/article/details/117805106<runtime><assemblyBindingxmlns="urn:schemas-microsoft-com:asm.v1"><probingprivatePath="bin;bin......
  • 内联函数、引用、汇编
    内联函数内联函数是一种特殊的C++函数,编译器会将它的代码直接插入到调用它的位置,而不是像普通函数那样进行函数调用。这可以减少函数调用的开销,从而提高性能。#include<iostream>usingnamespacestd;intfunc(intv1,intv2){ returnv1+v2;}inlineintfunc1......
  • 值类型和引用类型的区别
    值类型---简单类型基本类型 比如数字,字符串布尔等 引用类型 -复杂类型对象类型比如对象函数委托等 区别:1.内存层面:值类型内存的分配和释放有编辑器管理,引用类型内存的分配和释放由垃圾回收期(GC)管理2.存储位层面:存储位置:值类型存储栈内存,只有数据;引......
  • Spark中的闭包引用和广播变量
    闭包引用概念所有编程语言都有闭包的概念,闭包就是在一个函数中引用了函数外的变量。Spark中,普通的变量是在Driver程序中创建的,RDD的计算是在分布式集群中的task程序上进行的。因此,当分布式算子的函数引用了外部的变量时,Driver会把该变量序列化后通过网络发送给每一个task(只......
  • SpringBoot 循环引用解决办法
    Spring原生是允许并解决了单层循环引用的,但从SpringBoot2.6.0开始,默认禁止Bean之间的循环引用,如果存在循环引用就会启动失败报错。此时要解决循环引用问题有两个办法:设置Spring允许循环引用(推荐)。spring:main:allow-circular-references:true在循环引用......
  • C++指针与引用(Pointers OR References)
    一、PointersPointer是指针,可以用来指向任何一个objects,包括一般变量:1inti=3;2int*pi=&i;3cout<<pi<<endl;//0x0064FDF04cout<<*pi<<endl;//3此时pi本身内含i的地址,要取出pi所指向的object,可以使用*运算符(dereferenceoperator).Pointer......
  • httprunner 4.x学习 - 12 测试用例引用另一个测试用例
    前言把登录用例变 export导出变量,变成全局变量,这样其它用例可以引用登录用例config:name:登录variables:username:"admin1"password:"123456"teststeps:-name:postrequest:method:POSTurl:${ENV(base_url)}/loginjson:......
  • 揭秘JavaScript数据世界:一文通晓基本类型和引用类型的精髓!
    在编程的世界里,数据是构建一切的基础。就像建筑师需要了解不同材料的强度和特性一样,程序员也必须熟悉各种数据类型。今天,我们就来深入探讨JavaScript中的数据类型,看看它们如何塑造我们的代码世界。一、JavaScript数据类型简介数据类型是计算机语言的基础知识,数据类型广泛用于变......
  • JVM 内存溢出、泄漏与引用
    1、引用概述在栈上的reference类型存储的数据代表某块内存地址,称reference为某内存、某对象的引用。实际上引用分为很多种,从强到弱分为:强引用>软引用>弱引用>虚引用。平常我们使用的引用实际上是强引用,各种引用有自己的特点,强引用就是Java中普通的对象,而软引用、弱引用......
  • 微服务想缓存一些数据,不希望重复调用。java SoftReference软引用存储缓存
    背景:微服务我们要调用字典数据,但是很多都是要重复调用的,没有缓存,我为了设置一个应用的缓存,并且可以定时清理,更新 首先定义两个静态数据,。一个软连接缓存,一个定时清理线程privatestaticSoftReference<Map<String,Map<String,DictionaryVo>>>plmDicMapCache=newSoftR......