我是编程和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/