目录
引用在语法上的理解就是起别名,用法就是在类型后面加&,例子:int a = 1; int& b = a;
上例所示,执行后,b就是a的别名,它们代表同一块空间,a的改变会影响b,b的改变也会影响a。
- #include
- using namespace std;
- int main()
- {
- int a = 1;
- int& b = a;
- a = 3;
- printf("a = %d, b = %d\n", a, b);
- return 0;
- }
运行结果如下:
1、引用必须得初始化
2、一旦初始化,引用对象不可改变
3、一个引用只能有一个对象,但一个对象能有多个引用。
1、未初始化的引用会报错
2、一旦初始化,引用对象不可改变
执行结果:
3、一个对象可以有多个引用 (等于可以起多个别名)
执行结果:
引用做参数的价值十分大。在C语言,我们在函数里面想要修改参数必须使用指针,加大了编程难度,而C++里面我们就可以传引用(引用的底层也是指针,但从语法上来说,是参数的别名),在函数里直接修改参数,它在外面也会跟着改变,更加简单。
同时,在参数为string或vector、map等占空间比较大的类型时,引用做参数比不带引用更高效,因为拷贝会消耗内存,而我们传引用,因为底层是指针,只占4或8字节,所以更快。
执行结果:
引用做返回值可以让我们在调用函数后对返回值直接做调整。
但要注意不能返回函数里面的定义的变量的引用,因为函数体里面的变量在函数调用完成后是要销毁的,如果返回了临时变量的引用,就类似野指针一样,有风险。
执行结果:
在C语言中我们将一些频繁调用的小函数写为宏函数,提高代码的执行效率。但宏函数有着许多缺点:不检查数据类型、无法调试、写的难度略高,易写错。C++就出现了内联函数来替代宏函数,内联函数就是在函数名前面加 inline 关键字,它会在调用的地方展开,减少函数调用。
内联函数适用于频繁调用的小函数(10行左右),如:swap() ,max()等
内联函数只是建议编译器展开,并不代表一定会展开,若函数太长或函数为递归函数,编译器觉得不应该展开,那将不会展开。
如果声明和定义分离的内联函数,声明和定义都要写在头文件中,并加上inline关键字,因为inline只在定义起作用,内联函数在调用地方展开,是没有地址的。
感谢观看!!!