引用的本质

C++的个人学习之路!引用实际上是对指针的封装,引用函数的返回值是在程序设计中常用到的用法,下面我们来了解下它是怎么用的

引用的本质

引用的本质在C++内部实现是一个指针常量

在用的时候我们前面别想那么多,引用设计的概念就是让程序员可以方便地进行指针操作,如果你每次用的时候还要想这是个常量引用我要注意什么什么什么,那它出现的意义就变得很小了。

引用作为函数的返回值

使用引用做函数的返回值的时候要注意两点:

  1. 不要返回局部变量的引用
  2. 函数的调用可以作为左值(引用的变量必须不是局部变量)

下面看下两个测试案例理解上面的知识点:

#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;
}
原文地址:https://www.cnblogs.com/deehuang/p/14394776.html