还是引用

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int getA1()
 5 {
 6     int a;
 7     a = 10;
 8     return a; //复制一份交给主函数相关变量,然后自己消失,只是返回一个值,可能存在于除内存外的其他地方.
 9 }
10 
11 int& getA2()
12 {
13     int a;
14     a = 10;
15     return a; //将自己将给主函数相关变量,然后自己消失,返回的是变量本身,再底层的讲,返回的是该变量的内存首地址.只是在接受方知道这里是返回引用的话,会自动加*号取值,当然这都是C++编译器做的.
16 }
17 
18 int main()
19 {
20     int a1 = 0;
21     int a2 = 0;
22 
23     a1 = getA1(); //得到的是复制体,返回的只是一个值.返回不能当左值.         正体在函数体返回(右大括号)的时候就销毁了,复制体由=号操作赋值给了a1之后,自我销毁
24     a2 = getA2(); //得到的是getA2本身,但因为a2本身开辟了内存,所以能够保存值.返回可以当左值.没有复制体,a2得到的是getA2正体,在=号操作赋值给了a2之后,自我销毁
25 
26     int &a3 = getA2(); //用a3去引用getA2返回的变量本身.
27 
28     printf("a1:%d
", a1);
29     printf("a2:%d
", a2);
30     printf("a3:%d
", a3);
31     printf("123");
32     printf("a2:%d
", a2);
33 
34     cin.get();
35     return 0;
36 }
37 
38 int *j()
39 {
40     static int a = 10;
41     a++;
42     return &a;
43 }
44 
45 int main11()
46 {
47     j();
48     j();
49     //int *p = j();
50 
51     printf("%d
", *(j())); //输出13
52     return 0;
53 }




const& 相当于 int const *const a
&相当于 int *const a

当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名

 
原文地址:https://www.cnblogs.com/c-slmax/p/5179412.html