4.18日学习--引用
引用是变量的别名,它为已存在的变量提供了一个新的名称,对引用的操作实际上就是对其所引用变量的操作。引用在定义时必须初始化,且一旦初始化后就不能再引用其他变量。
#include <iostream>
using namespace std;//引用做函数的返回值//1、不要返回局部变量的引用int& test01()
{int a = 10; //局部变量存放在四区中的 栈区return a;
}//2、函数的调用可以作为左值int& test02()
{static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放return a;
}int main() {int &ref = test01();cout << "ref = " << ref << endl;//第一次结果正确,是因为编译器做了保留cout << "ref = " << ref << endl;//第二次结果错误,因为a的内存已经释放int& ref2 = test02();cout << "ref2 = " << ref2 << endl;cout << "ref2 = " << ref2 << endl;cout << "ref2 = " << ref2 << endl;test02() = 1000;//如果函数的返回值是引用,这个函数调用可以作为左值cout << "ref2 = " << ref2 << endl;cout << "ref2 = " << ref2 << endl;return 0;}
代码验证:
引用做函数返回值的规则
1.不要返回局部变量的引用 :
局部变量存储在栈区,当函数执行结束后,栈区的局部变量所占用的内存会被释放。如果返回局部变量的引用,那么引用将指向一个已经被释放的内存地址,这会导致未定义行为。
2.函数的调用可以作为左值:
静态变量存储在全局区,全局区上的数据在程序结束后才会被系统释放。因此,返回静态变量的引用是安全的,因为该变量的内存不会在函数结束时被释放。