#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;
}
当被调用的函数当左值的时候,必须返回一个引用