C++的个人学习之路!引用实际上是对指针的封装,引用函数的返回值是在程序设计中常用到的用法,下面我们来了解下它是怎么用的
引用的本质
引用的本质在C++内部实现是一个指针常量
在用的时候我们前面别想那么多,引用设计的概念就是让程序员可以方便地进行指针操作,如果你每次用的时候还要想这是个常量引用我要注意什么什么什么,那它出现的意义就变得很小了。
引用作为函数的返回值
使用引用做函数的返回值的时候要注意两点:
- 不要返回局部变量的引用
- 函数的调用可以作为左值(引用的变量必须不是局部变量)
下面看下两个测试案例理解上面的知识点:
#include <iostream>
using namespace std;
int& test1()
{
int a = 1;//局部变量存放在内存四区的栈区中
return a;
}
int& test2()
{
static int a = 1; //静态变量存放在全局去区,数据在程序结束后由系统释放
return a;
}
int main()
{ //引用做函数的返回值
//1、不要返回局部变量的引用
int &ref1 = test1();
cout << "ref1 = " << ref1 << endl;//1 第一次编译结果正确,是因为编译器做了保留
cout << "ref1 = " << ref1 << endl;//乱码,结果错误,因为a的内存已经释放
//2、函数的调用可以作为左值
int &ref2 = test2();
cout << "ref2 = " << ref2 << endl;//1 编译结果正确
cout << "ref2 = " << ref2 << endl;//1 编译结果正确,因为返回的是静态变量,生命周期结束在程序结束后,所以还是可以访问到这个内存
//调用作为左值
test2() = 100;
cout << "ref2 = " << ref2 << endl;//100
cout << "ref2 = " << ref2 << endl;//100
//因为test2()返回的其实就是函数里面a的引用
//既然是引用当然是可以把它当作a的别名。使用它给a所在的内存赋值
system("pause");
return 0;
}