• 探究A和A& 类型到底是啥意思,没做解析,勿进


     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 
     5 class A {
     6 public:
     7     int a = 1;
     8 public:
     9     int getRes() {
    10         cout << this<<endl;  // this其实就是&dx了
    11         return this->a;
    12     }
    13     // 总结:A类型(值类型)就表示这块内存中的数据;A& 类型(引用类型)就是表示这块内存的首地址+长度
    14     // 因为this是A* 类型,所以*this就是A类型
    15     A getRess() {
    16         return *this; //  A tmp=*this;相当于我把这块内存中的数据返回
    17     }
    18     A& getResss() {
    19         return *this;  // return A& a=(*this);我把这块空间的起始地址返回
    20     }
    21     
    22 };
    23 
    24 int main() {
    25     A dx;
    26     
    27    /* A& b = dx;
    28     A* c = &dx;
    29 
    30     // 指针c可以取地址,但C++11规定this(A* const 类型)是右值,不能取地址,但gdb里面听说可以取地址。(不同的编译的差别吧)
    31     // cout << dx << endl;    // A类型的不能直接输出,A*才可以(反正都是地址),vs2019把引用也识别成指针类型...引用的底层到底是不是指针常量呢?
    32     cout << &b << endl;
    33     cout << &c << endl;
    34     cout << c << endl;
    35     int i = dx.getRes();*/
    36     cout << &dx << endl;
    37     // return应该会有赋值步骤,不然后d、e和dx的地址应该是一样的
    38     A d = dx.getRess();   // d中的数据就等于x(x表示dx中的数据),类似于初始化吧 int d=1;
    39     A e = dx.getResss();  // 就是A& a=dx;A e=a;调用拷贝构造函数,类似于:int a=1; int e=a;
    40     A& f = dx.getResss();  // 就是A& a=dx; 临时变量a和dx的起始地址相同;然后A& f=a;f又和&a相同
    41     cout << &d << " " << &e << " "<<&f<<endl;
    42 
    43     // 探究A 和 A&  = *this的不同
    44     dx.a = 1;
    45     // (dx.getRess()).a = 2;  // 不能这样写
    46     // 原因:dx.getRess()这种产生的空间很快就会被销毁,应该会被编译器检测到,然后不允许被赋值的吧
    47     d.a = 2;
    48     cout << dx.a << endl;
    49     (dx.getResss()).a = 4;   // 会将dx.a改为4;回到++前置操作符,(++a)=2是合理的
    50     e.a = 5;      // 不会将dx.a改为5
    51     cout << dx.a << endl;
    52     return 0;
    53 }
    心之所愿,永不相忘
  • 相关阅读:
    安装windows系统(win7)
    三大跨平台网盘--dropbox
    三大跨平台网盘--google driver
    三大跨平台网盘--ubuntu one
    ubuntu制作usb启动盘
    高斯滤镜
    gimp之旅
    JAVAOOP集合框架
    JAVAOOP异常
    JAVAOOP多态
  • 原文地址:https://www.cnblogs.com/zgll/p/15536061.html
Copyright © 2020-2023  润新知