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

一、引用

1、初步理解

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

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

cpp 复制代码
#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只在定义起作用,内联函数在调用地方展开,是没有地址的。

感谢观看!!!

相关推荐
luckys.one3 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|4 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师5 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo35 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
好家伙VCC6 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
利刃大大6 小时前
【高并发内存池】五、页缓存的设计
c++·缓存·项目·内存池
C语言小火车7 小时前
【C++八股文】基础知识篇
c++·tcp/ip·const·智能指针·多线程同步·static关键字·c++内存模型
liulilittle7 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
眠りたいです7 小时前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
Want5958 小时前
C/C++圣诞树①
c语言·开发语言·c++