c++引用做函数返回值的理解

2023-11-11

(1)以引用返回函数值,定义函数时需要在函数名前加 &

(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

引用作为返回值,必须遵守以下规则:

(1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

c++关于引用或指针做返回值的思考: https://www.cnblogs.com/saintlas/p/5738724.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++引用做函数返回值的理解 的相关文章

  • C++多态

    个人简介 作者简介 大家好 我是菀枯 支持我 点赞 收藏 留言 格言 不要在低谷沉沦自己 不要在高峰上放弃努力 前言 之前我们已经将面向对象三大特性中的封装和继承讲了 接下来剩下最后一个环节了 那就是 多态 多态概念 通俗来说 就是去做相同
  • C++基础(10)——函数模板和类模板

    前言 本文主要介绍了C 中函数模板和类模板基本知识 6 1 函数模板 模板函数的定义 template
  • C++ STL模板库用法查询及一些常见面试题(自用)

    C STL模板库 文章目录 C STL模板库 用法查询 Array 1 使用 2 创建 3 成员函数 Vector 1 使用 2 创建 3 成员函数 deque 1 使用 2 创建 3 成员函数 list 1 使用 2 创建 3 成员函数
  • C++ bind与回调函数

    1 回调函数 注册回调函数里可以使用functional来统一接口 可以传入函数指针 lambda bind等 函数1 2 为一个模块 为回调函数 函数3为一个模块 为注册回调函数 形参为函数指针 注册回调函数的入参为函数指针 指向回调函数
  • C++之const类成员变量,const成员函数,const指针

    https www cnblogs com cthon p 9178701 html 结合下面这个链接观看更佳 讲常量指针和指向常量的指针的 https www cnblogs com lihuidashen p 4378884 html
  • ASCII Unicode, UTF8 的关系,string和wstring转换

    目录 1 三大编码由来和转换 2 三大编码在计算机中应用 3 char string 和wchar t wstring 转换 写这篇文章遇到的的问题是c 操作正则的时候 遇到中文出现匹配失败 以及visual studio中中文乱码问题 当
  • C++学习第八篇——字典树

    学习了之前的树状结构 接下来就可以利用树状结构存储数据了 首先什么是字典树 字典树就是利用树的结构按照字典的原理进行存储的数据结构 树的结构我们了解了 字典是什么样的呢 我们通常去查英文单词的时候 往往都是英文字母a b c d x y z
  • 第二章排错的工具:调试器Windbg(下)

    感谢博主 http book 51cto com art 200711 59874 htm 2 2 读懂机器的语言 汇编 CPU执行指令的最小单元 2 2 1 需要用汇编来排错的常见情况 汇编是CPU执行指令的最小单元 下面一些情况下 汇编
  • C++ 预处理器

    http www runoob com cplusplus cpp preprocessor html
  • 1-2 VS2019常用调试方法(断点设置、条件断点、调试按钮、逐过程、逐语句、监视变量、快速监视)

    文章目录 前言 1 打印数据 2 普通断点 2 1断点快捷键 3 条件断点与条件追踪 4 单步调试 5 添加监视 5 1快速监视 前言 主要调试方法 1 打印数据 2 普通断点 3 条件断点与条件追踪 4 单步调试 5 添加监视 1 打印数
  • C++ deque底层原理

    deque底层原理 一 目的 二 底层实现 三 原理图 四 类结构 五 push back 六 pop back 一 目的 实现双端数组 二 底层实现 双向开口的连续线性空间 三 原理图 四 类结构 class deque protecte
  • 【菜鸟C++学习杂记】ASCII码转换和显示

    笔者今年刚考上华东某高校的计算机研究生 本科虽是计算机学院 但期间主攻C 和Unity游戏开发 研究生属于小跨到计算机科学与技术 目前在进行硕导给的假期期间学习C 的任务 此类杂记主要记录下编码过程遇到的一些有趣的小知识 在某网课遇到了一个
  • C语言:结构体中(.)和(->)的区别

    首先 要了解 a b 等价于 a gt b 概念上 一般情况下用 只需要声明一个结构体 格式是 结构体类型名 结构体名 然后用结构体名加 加域名就可以引用域 了 因为自动分配了结构体的内存 如同 int a 一样 而用 gt 则要声明一个结
  • 突如其来的C#重新学习(2)

    突如其来的C 重新学习 2 关于Main入口点的问题 Main在C 中不能单独声明 所以必须声明在同一个类中 而且必须声明静态方法 返回可以是void或者int 正常执行应当返回0 对于一个命名空间之内有很多的类的情况下 就可以手动选择从哪
  • C++给变量起别名

    以下代码展示给变量a取一个别名b 两者指向同一个内存空间位置 改变b a也会相应改变 include
  • 无法从命令行或调试器启动服务,必须首先安装Windows服务....。在“安装”阶段发生异常。 System.Security.SecurityException:未找到源

    此处一共两个问题 第一个问题完整描述是 无法从命令行或调试器启动服务 必须首先安装Windows服务 使用installutil exe 然后用ServerExplorer Windows服务器管理工具或NET START命令启动它 第二个
  • C++征途 --- List链表容器

    第一部分 基础概念 上面这个模型的是一个单向链表 优点 1 链表增加和删除节点的时候不需要进行vector数组那样的增完后进行后移 也不需要删完后前移 当它增加一个节点的时候 只需要将它插入的位置的上一个节点的指针域中的指针指向增加的节点
  • Ubuntu20.04中VSCode配置C++以及分文件编写配置

    网上搜索了很多文章 一直显示找不到自定义的头文件 今天总算捣鼓出来了 参考文章 https www cnblogs com icmzn p 16244665 html https blog csdn net qq 39048131 arti
  • C++实现复数类

    主要还是练习封装 做一个demo 下一步会实现string类 include
  • C#——反射和特性

    元数据 程序是用来处理数据的 文本和特性都是数据 而我们程序本身这些也是数据 有关程序及其类型的数据被称为元数据 他们保存在程序的程序集中 反射 程序在运行时 可以查看其它程序集或其本身的元数据 一个运行的程序查看本身的元数据或者其他程序集

随机推荐

  • rank/row_number() OVER ()使用

    row number OVER PARTITION BY COL1 ORDER BY COL2 表示根据COL1分组 在分组内部根据 COL2排序 而此函数计算的值就表示每组内部排序后的顺序编号 组内连续的唯一的 与rownum的区别在于
  • Qt 打开文件夹并选择该文件

    打开文件夹 并选择指定文件 打开文件夹 并且选择指定文件 QString fileName ui gt lineEdit gt text if fileName isEmpty return QProcess process fileNam
  • SQL数据库插入、修改、删除及删除表中数据操作示例(insert、update)

    目录 1 数据库的连接 创建 2 对字段的操作 alter table 3 SQL数据库插入 修改 删除操作 4 数据库的查询操作大全 select 5 多表查询 join on 6 约束操作 三 SQL数据库插入 修改 删除 1 插入数据
  • linux-arm电源管理

    一文搞懂ARM SoC功耗控制架构
  • kube-apiserver启动时报错并且不能操作etcd

    kube apiserver启动时报错 错误信息如下 Flag kubelet port has been deprecated kubelet port is deprecated and will be removed W0914 15
  • 软构第九天:OOP编程语法

    文章目录 前言 一 OOP的基本概念 二 基本概念 类 对象 属性 方法 三 接口 四 继承与重写 五 多态 子类型 重载 总结 前言 上节课说了ADT的相关内容 这节课老师讲述了ADT思想在编程语言中的具体体现 OOP OOP思想我们已经
  • 操作系统之虚拟化CPU(一)介绍

    但凡学习过计算机的人 一定都听说过一个问题 并发和并行的区别 此处引用知乎用户的关于吃饭的形象比喻 是的 你就是任劳任怨的CPU 而吃饭和接电话是你要执行的多个任务 你吃饭吃到一半 电话来了 你一直到吃完了才去接 说明你不支持并发也不支持并
  • (3)使用uboot界面通过tftp安装kernel,rootfs

    板子已经通过Hitool烧录U boot 参数配置 1 单板上电后 敲任意键进入u boot 设置serverip 即tftp服务器的ip ipaddr 单板ip 和ethaddr 单板的MAC地址 hisilicon setenv ser
  • ldap登录 AD域登录工具类

    1 依赖包
  • RabbitMQ 消息确认机制、补偿机制、消息幂等性实践

    1 场景 先看这么几个面试题 如何保证消息的可靠性投递 即如何确定消息是否发送成功 如果失败如何处理 补偿机制 如何保证消息不被重复消费 或者说 如何保证消息消费时的幂等性 2 消息的可靠性投递 消息确认 消息确认包括主要生产者发送确认和消
  • ChatGPT认知课07:ChatGPT AI时代,还需要专门学写作么?

    5 天前 ChatGPT云炬学长 关注 我认为ChatGPT出现后 我们更需要学写作了 这节课就聊聊这个话题 01ChatGPT会像作家一样写出好作品么 自媒体人 职业写作者会失业么 ChatGPT可以高效生成文本 语言表达能力确实牛逼 但
  • 京东的Netty实践,京麦TCP网关长连接容器架构

    背景 早期京麦搭建 HTTP 和 TCP 长连接功能主要用于消息通知的推送 并未应用于 API 网关 随着逐步对 NIO 的深入学习和对 Netty 框架的了解 以及对系统通信稳定能力越来越高的要求 开始有了采用 NIO 技术应用网关实现
  • 如何设置文本输入框中字体的颜色?

    设置input type text或者textarea这些能输入内容的文本框 或区域 的颜色 input type text name T1 size 20 style color 00FF00 这一块就是设置文字颜色的
  • C++命令模式

    命令模式 原理 背景 原理 代码解释 应用 工作队列 记录日志 思考 原理 背景 在日常的编程过程当中 我们时常会遇到需要在底层执行许多方法的情况 在工厂模式中 以面馆为例 介绍了如何通过继承抽象接口 帮助面馆实现原材料上的多样性 以区分不
  • 111、锐捷交换机如何配置?一步步详解,交换机配置再也不难了

    锐捷交换机最近挺火 这段时间不断的有朋友多次提到锐捷交换机的配置 本期我们来了解锐捷交换机的配置 本期内容共分为两部分 第一部分是vlan的基础配置命令 第二部分是锐捷交换机的配置实例 我们一起来看下 如何一步步的连接及配置锐捷交换机 一
  • 微信小程序云函数构建npm,找不到node_modules以及后续出现上传所有文件,并没有上传node_modules的文件问题

    最近研究下微信小程序云函数 在构建npm的时候困扰了很久 总是提示找逼到node modules 之前一直也没接触过nodejs 不想购买服务器 选择尝试下云开发 出现这个错误在网上找了很多 都没找到原因 包括官方文档 下面的过程有些别扭
  • PopupMenu用法

    PopupMenu是种显示位置不固定的弹出菜单 因为它显示在参照控件下方 所以展示位置随着参照控件的位置变化而变化 而且 坑人的是PopupMenu有两个版本 一个是在v7包中的 一个是在系统自带包中的 我下面讲的是v7包中的 其实两个都是
  • 无法git pull,getLastSuccessful failed

    Remote URL test failed getLastSuccessful failed token a7995c09 4e90 44f4 b143 67445d302f75 userName my server adress cli
  • Linux下的用户和用户组

    用户 Linux系统的使用者 管理员 root 系统用户 普通用户 用户组 一对一 一对多 多对一 多对多 两个概念 三个重要文件 etc passwd 例子 yiqi x 1003 1003 home yiqi bin bash 解释 用
  • c++引用做函数返回值的理解

    1 以引用返回函数值 定义函数时需要在函数名前加 2 用引用返回一个函数值的最大好处是 在内存中不产生被返回值的副本 引用作为返回值 必须遵守以下规则 1 不能返回局部变量的引用 主要原因是局部变量会在函数返回后被销毁 因此被返回的引用就成