引用

#include <iostream>
using namespace std;
int getAA() {
    int a;
    a = 10;
    return a;
}
int& getAA1() {
    int a;
    a = 10;
    return a;
}
int main() {
    int a = 0;
    int a2 = 0;
    a = getAA();
    a2 = getAA1();

    int &a3 = getAA1();
    cout << "a: " << a << endl;
    cout << "a2: " << a2 << endl;
    cout << "a3: " << a3 << endl;
    /*
        a3产生乱码,因为引用相当于编译器做了如下操作
        int * getAA1() {
            int a;
            a = 10;
            return &a;
        }
        当执行int &a3 = getAA1();的时候getAA1返回a的地址,a3中实际存了地址,打印a3的时候,编译器做了*a3的操作,
        但是,a是临时变量,在将地址传给a3之后就回收了,所以,此时打印a3将会出现不确定的乱码
        而a2不同,在执行a2 = getAA1();的时候,getAA1()返回了a的地址,但是a2是整型,所以,a2中传入的是地址a的值,
        后来在打印的时候,虽然临时变量a的值已经回收,但是a2中已经存下了a的值,可以正确打印
    */
    system("pause");
    return 0;
}

当被调用的函数当左值的时候,必须返回一个引用

原文地址:https://www.cnblogs.com/dongjian16/p/6992735.html