我是编程和C ++的新手。
我很困惑这里引用如何工作。

下面的代码输出0 5,但是从&中删除​​A &GotObj()将会输出0 0。为什么第二种情况不输出0 5

提前致谢。

#include <iostream>
using namespace std;

class A {
public:
    int val;
    A(int n=0) {
        val = n;

    }
    A &GetObj() {
        return *this;
    }
};

int main() {
    A a;
    cout << a.val << endl;
    a.GetObj() = 5;
    cout << a.val << endl;
    return 0;
}

最佳答案

情况1:一个GetObj()



让Create类为A的对象:



  A a;



假设此对象的存储位置为0x87965432。现在,当您通过调用对象a的函数时
a.GetObj()然后返回一个临时对象,该对象的存储位置将与A类的对象a完全不同,可以说0x98672345。现在,如果您将值5指定为



  a.GetObj()= 5



则将值5分配给位于内存位置0x98672345的对象。现在,您将要打印位于内存位置0x87965432的对象的val变量。这就是为什么它将打印0的原因。



  情况2:A&GetObj()



如案例1所述,如果您通过以下方式创建对象



  A a;



让我们考虑其存储位置0x87965432。现在,当您通过a.GetObj()调用函数GetObj时,返回对象将具有相同的存储位置0x87965432,这是其通过引用返回的概念。现在将值5分配给该对象,



  a.GetObj()= 5


将反映对象a的效果。现在变量val的打印值将达到预期的5。

关于c++ - 具有引用返回类型的C++类成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34648154/

10-13 09:08