• 还是引用


     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++编译器会为常量值分配空间,并将引用名作为这段空间的别名

     
  • 相关阅读:
    ZJNU 1216
    ZJNU 1370
    ZJNU 2018
    python装饰器(简单装饰器、叠加装饰器、防止被装饰函数更名、参数化装饰器)
    etcd学习(6)-etcd实现raft源码解读
    etcd学习(5)-etcd的Raft一致性算法原理
    etcd学习(4)-centos7中部署etcd
    etcd学习(3)-grpc使用etcd做服务发现
    etcd学习(2)-etcd中watch源码解读
    etcd学习(1)-etcd的使用场景
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5179412.html
Copyright © 2020-2023  润新知