4.18日学习--引用

引用是变量的别名,它为已存在的变量提供了一个新的名称,对引用的操作实际上就是对其所引用变量的操作。引用在定义时必须初始化,且一旦初始化后就不能再引用其他变量。

#include 
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;

}

代码验证:4.18日学习--引用_第1张图片 

引用做函数返回值的规则

1.不要返回局部变量的引用 :

局部变量存储在栈区,当函数执行结束后,栈区的局部变量所占用的内存会被释放。如果返回局部变量的引用,那么引用将指向一个已经被释放的内存地址,这会导致未定义行为。

2.函数的调用可以作为左值:

静态变量存储在全局区,全局区上的数据在程序结束后才会被系统释放。因此,返回静态变量的引用是安全的,因为该变量的内存不会在函数结束时被释放。

 

 

你可能感兴趣的:(学习,c++,算法)