C++的引用和内联函数,auto

什么是引用

引用就是取别名

可以给一个变量取多个别名,也可以给别名取别名

别名与本名拥有同一地址,对任意别名修改,也会同时修改其他别名和本名

引用的作用

引用的作用与指针重叠度很高

图中函数的参数int& a,int& b,a是x的别名,b是y的别名

则ab的交换就是xy的交换

引用传参还可以减少函数调用的时间,提高函数调用的效率

引用的特性

1.引用在定义的时候必须初始化

2.一个变量可以有多个引用

3.引用一旦引用一个实体,就不能再引用其他实体

引用要避免权限的放大

不能这样,因为n再引用时放大了m的权限

这样是正确的

引用可以缩小权限

但是此时如果y++,则z++(只是不能通过z修改)

类型转换时会产生一个临时变量,

这里d会取出整形部分,并将其给临时变量,临时变量再赋给i

临时变量具有常性,相当于有const修饰

因此上图不行,应该为

计算也会产生临时变量

指针和引用的区别

.

但是引用和指针在底层上时一样的

内联函数

对于频繁调用的小函数,每次调用都需要建立一个栈帧,消耗过多

可以使用内联函数(inline)来提升程序效率

相当于直接将函数展开到调用的地方,而不是调用函数

因为大函数的展开会有很大的缺陷

导致编译出来的可执行程序变大

占用空间变大

同时内联不能有声明和定义的分离

因为调用函数需要"call"一个函数的地址,但是由于内联函数是直接展开的,相当于没有地址

因此链接时找不到函数

关键字auto

根据右边的数据自动对应类型

auto可以替代长类型的定义,简化代码

auto不能作为参数

auto也不能用来定义数组

auto遍历数组

C++中提供了一种新的遍历数组的方式

但是注意,该种遍历方式不能修改数组的值,因为e是一个临时变量而非数组内的值本身

想修改数组中的值需要加引用&

当然auto的位置其实是类型名

因此也可以换为其他类型

不过通常还是用auto较为方便

但是auto存在一定缺点,for循环迭代的范围必须是确定的, 对于数组就是首元素和尾元素,

当传入数组进入函数时无法使用

因为数组传参的本质是传入数组首元素的地址,而没有尾元素的地址

typeid


typeid可以看到数据的类型

空指针nullptr

这样定义存在缺陷

可以看到两个函数的调用都匹配到了第一个函数,因为宏替换后就没有区别了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/617120.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【七 (2)FineBI FCP模拟试卷-平台新增用户留存分析】

目录 文章导航一、字段解释1、用户平台登录信息表格2、用户平台激活信息表格 二、需求三、操作步骤1、建立用户平台登录信息表格和用户平台激活信息表格的关联关系2、将用户平台激活信息表格的激活日期添加到用户平台登录信息表格3、新增公式列,计算激活时间和登录时…

JavaSE——常用API进阶二(3/8)-Date、SimpleDateFormat(构造器、常用的方法、用法示例、时间格式的常见符号)

目录 Date 构造器、常用的方法 用法示例 SimpleDateFormat 构造器、格式化时间的方法 时间格式的常见符号 用法示例 解析字符串时间成为日期对象 接下来会学习JDK8以前传统的日期、时间,以及JDK8开始新增的日期、时间;有部分项目还是有在使用JDK…

mac 配置前端开发环境brew,git,nvm,nrm

我的电脑是mac 3 pro 一、配置Homebrew 打开终端,执行指令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"查看版本 brew -v 安装nvm brew install nvm 再执行 brew reinstall nvm 我这边安装好了…

【Linux实践室】Linux高级用户管理实战指南:用户所属组变更操作详解

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux查看用户所属组2.1.1 👻使…

Spring源码刨析之配置文件的解析和bean的创建以及生命周期

public void test1(){XmlBeanFactory xmlBeanFactory new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));user u xmlBeanFactory.getBean("user",org.xhpcd.user.class);// System.out.println(u.getStu());}先介绍一个类XmlBeanFac…

前 5 名 iPhone 数据恢复软件评测

如今,我们似乎将整个生活都放在手机和移动设备上。他们用许多照片、备忘录、日历日期等记录了我们的生活,我们总是假设这些信息在我们需要时随时可以访问。但是,有许多情况会导致iPhone上的数据丢失,例如iPhone被盗,损…

【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

微信跳转页面时发生报错

报错如下图所示: 解决方法:(从下面四种跳转方式中任选一种,哪种能实现效果就用哪个) 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

【LAMMPS学习】八、基础知识(1.8)键的断裂

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【MySQL】:深入解析多表查询(下)

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 自连接1.1 自连接查询1.2 联合查询 二. 子查询2.1 概述2.2 分类2.3 标量子查…

【第6章】spring转换器

文章目录 前言一、手工处理二、自定义转换器1. 新建bean2. 新建转换器类3. spring配置4. 测试5. 测试结果 总结 前言 不知道大家有没有注意到,我们【第4章】依赖注入和自动装配,我们注入了String、Integer、Date等类型的参数,其实都是通过配置value标签注入的,本质上都一样,那…

Towards IP Geolocation Using Delay and TopologyMeasurements(TBG)(2006年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:492 Katz-Bassett E, John J P, Krishnamurthy A, et al. Towards IP geolocation using delay and topology …