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

C++入门之引用与内联函数

一、引用

1、初步理解

引用在语法上的理解就是起别名用法就是在类型后面加&,例子:int a = 1; int& b = a;

上例所示,执行后,b就是a的别名,它们代表同一块空间,a的改变会影响b,b的改变也会影响a。

#include<iostream>
using namespace std;
int main()
{int a = 1;int& b = a;a = 3;printf("a = %d, b = %d\n", a, b);return 0;
}

 运行结果如下:

 2、使用细节

1、引用必须得初始化

2、一旦初始化,引用对象不可改变

3、一个引用只能有一个对象,但一个对象能有多个引用。

1、未初始化的引用会报错

 2、一旦初始化,引用对象不可改变

执行结果:

 3、一个对象可以有多个引用 (等于可以起多个别名)

执行结果: 

3、做参数和返回值 

引用做参数的价值十分大。在C语言,我们在函数里面想要修改参数必须使用指针,加大了编程难度,而C++里面我们就可以传引用(引用的底层也是指针,但从语法上来说,是参数的别名),在函数里直接修改参数,它在外面也会跟着改变,更加简单。

同时,在参数为string或vector、map等占空间比较大的类型时,引用做参数比不带引用更高效,因为拷贝会消耗内存,而我们传引用,因为底层是指针,只占4或8字节,所以更快。

 执行结果:

 引用做返回值可以让我们在调用函数后对返回值直接做调整。

要注意不能返回函数里面的定义的变量的引用,因为函数体里面的变量在函数调用完成后是要销毁的,如果返回了临时变量的引用,就类似野指针一样,有风险。

 执行结果:

 2、内联函数

在C语言中我们将一些频繁调用的小函数写为宏函数,提高代码的执行效率。但宏函数有着许多缺点:不检查数据类型、无法调试、写的难度略高,易写错。C++就出现了内联函数来替代宏函数,内联函数就是在函数名前面加 inline 关键字,它会在调用的地方展开,减少函数调用。

 内联函数适用于频繁调用的小函数(10行左右),如:swap() ,max()等

内联函数只是建议编译器展开,并不代表一定会展开,若函数太长或函数为递归函数,编译器觉得不应该展开,那将不会展开。

如果声明和定义分离的内联函数,声明和定义都要写在头文件中,并加上inline关键字,因为inline只在定义起作用,内联函数在调用地方展开,是没有地址的

感谢观看!!!

http://www.lryc.cn/news/195835.html

相关文章:

  • 浅谈智能照明控制系统应用在城市轨道交通
  • macos 中ios系统升级,但是macos还是老系统,在手机上无法安装ios软件
  • Pytest+Allure生成可添加附件的测试报告
  • Spacedrive:开源跨平台文件管理 | 开源日报 No.57
  • c# 同步异步锁
  • 【Spring AOP】统⼀数据返回格式
  • python+django高校体育乒乓球场地预约管理系统_s2409
  • Python Selenium设计模式-POM
  • 【计算机毕设选题推荐】网络在线考试系统SpringBoot+SSM+Vue
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA的LIN总线控制器设计与验证(续)
  • Qt ModelView显示数据库数据
  • Vue-3.1缓存组件keep-alive
  • 14.8 Socket 一收一发通信
  • 7天狂揽 1.3w star 的 MetaGPT,他们的目标让软件公司为之一惊
  • 工控网络协议模糊测试:用peach对modbus协议进行模糊测试
  • python+opencv+机器学习车牌识别 计算机竞赛
  • 魔域服务端数据库说明
  • 笔记本无线网卡MAC一直改动
  • 【Tomcat】Apache发布两个新版本Tomcat修复多个Bug
  • Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记
  • LeetCode 2652. 倍数求和【数学,容斥原理】简单
  • ansible-playbook剧本
  • 竞赛选题 深度学习LSTM新冠数据预测
  • 机械设计师应该在工作中培养哪些良好习惯?
  • 小程序新增功能页面
  • LeetCode每日一题——2652. Sum Multiples
  • Python问答题(更新中)
  • 服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复
  • 游游的字母串 (环形数组两点之间的位置)
  • Flink的ResourceManager详解(一)