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

在什么时候需要用到常引用const---情景

目录

1.避免拷贝大对象

2.保持对象的不可变性

3.避免对象的切片问题

4.传递类对象给函数

5.提高函数的泛用性


在C++里面,使用常引用主要就是为了提高我们的程序的效率和安全性;

场景分析:

1.避免拷贝大对象

大对象就是内容量大,占用的内存多,使用普通的引用就会降低我们的程序开发的效率,因为要进行拷贝操作,我们使用const&常引用可以避免这个拷贝的操作,提高我们的程序性能;

2.保持对象的不可变性

就是使用我们的const常引用可以让我们的这个定义的对象无法被其他的人进行修改,提高我们的代码的安全性;

3.避免对象的切片问题

对象的切片指的就是我们的这个我们的派生类给这个基类的时候,我们的这个派生类的成员变量和函数会被丢失,这个就是在进行值传递的时候发生的;

我们使用常引用可以避免这个对象的切片问题,子类的这个函数和变量不会被丢失;

4.传递类对象给函数

这个是C++的精髓,对于默认的成员变量,我们进行默认拷贝构造的时候没有问题,但是当有指针的时候,因为会进行这个默认构造函数的调用,原来的对象和我们的新的拷贝对象公用相同空间,就会出现浅拷贝的问题,这个时候我们需要自己去实现这个拷贝构造函数的编写;

这个就是C++里面的浅拷贝和深拷贝的问题,我们需要自己实现深拷贝,避免这个内存空间的重复释放,这个就会有const&发挥作用;

 

5.提高函数的泛用性

这个泛用性就是可以支持我们的左值引用和右值引用,可以让我们的这个函数接受任意类型的参数,提高泛用性就是接受的参数类型比较多,提高我们的程序的参数普适性;

相关文章:

  • Java中的JDK8及后续的重要新特性
  • 【NumPy】专题学习
  • Qt优秀开源项目之二十三:QSimpleUpdater
  • Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作
  • Redisson分布式锁的概念和使用
  • 【ShuQiHere】深入解析 B+ 树(B+ Tree):高效数据存储与快速查找的终极方案
  • 解决多尺度网络中上采样尺寸不一致问题
  • Windows内核编程基础(3)
  • excel 单元格一直显示年月日
  • Webpack教程-概述
  • 趣笔阁爬虫实验
  • 华为eNSP使用详解
  • vue-cli,element-plus,axios,proxy
  • docker-图形化工具-portainer的使用
  • NXP i.MX8系列平台开发讲解 - 4.2.2 摄像头篇(二) - 摄像头DVP接口
  • 30秒的PHP代码片段(1)数组 - Array
  • 5、React组件事件详解
  • CentOS 7 修改主机名
  • CSS实用技巧
  • Electron入门介绍
  • PAT A1050
  • VUE es6技巧写法(持续更新中~~~)
  • Windows Containers 大冒险: 容器网络
  • 基于webpack 的 vue 多页架构
  • 聚类分析——Kmeans
  • 你不可错过的前端面试题(一)
  • 前端_面试
  • 项目管理碎碎念系列之一:干系人管理
  • 一文看透浏览器架构
  • ​一些不规范的GTID使用场景
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #NOIP 2014# day.2 T2 寻找道路
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #QT(串口助手-界面)
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)无线电失控保护(二)
  • (4)logging(日志模块)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (k8s)kubernetes集群基于Containerd部署
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计大学生兼职系统
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (三分钟)速览传统边缘检测算子
  • **CI中自动类加载的用法总结
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net 代码性能 - (1)
  • .NET设计模式(11):组合模式(Composite Pattern)
  • ::
  • @DataRedisTest测试redis从未如此丝滑