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#学习05-类简介与派生继承

    基本概念 类是一种数据结构 它可以包含数据成员 函数成员以及嵌套类型 C 中类的声明 C 中类的声明即定义 不同于c 中声明与定义是分开的 C 类构造函数 类的 构造函数 是类的一个特殊的成员函数 当创建类的新对象时执行 构造函数的名称与类
  • C++ STL模板库用法查询及一些常见面试题(自用)

    C STL模板库 文章目录 C STL模板库 用法查询 Array 1 使用 2 创建 3 成员函数 Vector 1 使用 2 创建 3 成员函数 deque 1 使用 2 创建 3 成员函数 list 1 使用 2 创建 3 成员函数
  • ASCII Unicode, UTF8 的关系,string和wstring转换

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

    学习了之前的树状结构 接下来就可以利用树状结构存储数据了 首先什么是字典树 字典树就是利用树的结构按照字典的原理进行存储的数据结构 树的结构我们了解了 字典是什么样的呢 我们通常去查英文单词的时候 往往都是英文字母a b c d x y z
  • STL——set容器、map容器

    初识STL set容器 multiset容器 set容器 构造和赋值 set容器 大小和交换 set容器 插入和删除 set容器的查找和统计 set和multiset的区别 set的相关操作源码 multiset的相关操作源码 pair使用
  • c++学习——构造函数和析构函数

    构造函数和析构函数 简要概述 构造函数和析构函数的简单调用 构造函数和析构函数能够函数重载 默认的构造函数和析构函数 拷贝构造 构造函数的分类和调用 匿名对象 拷贝构造函数的调用时机 构造函数的调用规则 多个对象的构造函数和析构函数 深浅拷
  • osgEarth的Rex引擎原理分析(一二三)osgEarth的缓存及其结构

    目标 十七 中问题43 1 缓存分两类 1 文件缓存 osgDB FileCache FileSystemCache 位于osgEarthDrivers cache filesystem FileSystemCache osgDB File
  • c++下的文件批量读写——查找文件的类 struct _finddata_t结构体用法

    查找文件的类 struct finddata t结构体用法 https blog csdn net yang332233 article details 53081785 但是运行原链接的代码时在while findnext handle
  • C++的指针与引用可能并不难,只是你没理解

    目录 复合类型 引用 引用即别名 引用的定义 引用的两种例外情况 指针 获取对象的地址 指针值 利用指针访问对象 某些符号有多重含义 空指针 建议 初始化所有指针 赋值和指针 其他指针操作 void 指针 理解复合类型的声明 定义多个变量
  • C语言:结构体中(.)和(->)的区别

    首先 要了解 a b 等价于 a gt b 概念上 一般情况下用 只需要声明一个结构体 格式是 结构体类型名 结构体名 然后用结构体名加 加域名就可以引用域 了 因为自动分配了结构体的内存 如同 int a 一样 而用 gt 则要声明一个结
  • C++复制构造函数和赋值符的区别

    今天做C primer的习题 被复制构造函数和赋值符的区别弄晕了 简单地说 有一道题目如下描述 class t1 class t2 t1 我先看见有一个等号 以为就是赋值符来做的 其实并不是这样的 做一个实验好了 class CTest p
  • C++写csv文件

    代码如下 include
  • C++学习(四八七)android studio println的输出位置

    程序中调用如下输出 System out println haha1 调试情况下 在Run和LogCat下均看不到输出 运行情况下 在Run下能看到输出 建议如下 可在LogCat中看到信息 android util Log常用的方法有以下
  • C++给变量起别名

    以下代码展示给变量a取一个别名b 两者指向同一个内存空间位置 改变b a也会相应改变 include
  • 【c++从菜鸡到王者】第五篇-( 全网最精华)条件编译ifdef的用法

    预处理指令 预处理指令是以 号开头的代码行 号必须是该行除了任何空白字符外的第一个字符 后是指令关键字 在关键字和 号之间允许存在任意个数的空白字符 整行语句构成了一条预处理指令 该指令将在编译器进行编译之前对源代码做某些转换 预处理指令是
  • 无法从命令行或调试器启动服务,必须首先安装Windows服务....。在“安装”阶段发生异常。 System.Security.SecurityException:未找到源

    此处一共两个问题 第一个问题完整描述是 无法从命令行或调试器启动服务 必须首先安装Windows服务 使用installutil exe 然后用ServerExplorer Windows服务器管理工具或NET START命令启动它 第二个
  • c++使用继承类实现异常处理

    sales h pragma once include
  • C语言深入学习--checklist4:宏、枚举、switch

    宏 1 宏的本质是什么 函数 语句 类型定义 或者其它 预编译器的文本替换 1 你知道语言设计者为什么设计宏吗 这些原因目前是否成立 在 C程序中 可以用宏代码提高执行效率 宏代码本身不是函数 但使用起来象函数 预处理器用复制宏代码的方式代
  • 如何用结构体替代数组实现学生信息的录入与比较

    这里是一个有关学生学号 成绩信息的录入 输出成绩最高的学生信息 供参考学习 include

随机推荐

  • 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 不能返回局部变量的引用 主要原因是局部变量会在函数返回后被销毁 因此被返回的引用就成