我是编程和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;
}
答案 0 :(得分:1)
当您按值返回时,表达式a.GetObj()
只会创建一个临时表达式。然后,分配只会更改该临时值。
答案 1 :(得分:1)
这个引用只是一个语法略有不同的指针。
将GetObj
定义为
A& GetObj() { return *this: }
它返回a的引用(即指针)。 然后,分配
a.GetObj() = 5
使用参数5有效地调用a
的赋值运算符,它将a的值更改为5.
但是如果你将GetObj()
定义为
A GetObj { return *this; }
它返回一个全新的临时对象,其值与a相同。 因此,当您稍后为其指定5时,它不会更改a的值。
答案 2 :(得分:-1)
案例1:GetObj()
A a;
a.GetObj()= 5
案例2:A&amp; GetObj()
A a;
a.GetObj()= 5
将反映对象a中的效果。现在变量 val 的打印值将如预期的那样5。