【发布时间】:2018-12-21 07:54:32
【问题描述】:
#include<iostream>
using namespace std;
class Test
{
private:
int x;
public:
Test(int x = 0) { this->x = x; }
void change(Test *t)
{
this = t; //line 1
}
void print() { cout << "x = " << x << endl; }
};
int main()
{
Test obj(5);
Test *ptr = new Test (10);
obj.change(ptr);
obj.print();
return 0;
}
因为我们知道这个指针持有调用对象的引用。在第 1 行中,我试图更改调用对象的引用,但它显示错误“需要左值”。有人可以解释一下吗?
【问题讨论】:
-
this = t没有意义,也许你的意思是*this = *t? -
还有一个一般提示:停止使用指针。除了多态之外,C++ 中很少需要指针。
-
this是Test * const,因此无法分配给。这样做(如果允许的话)将有效地允许对象更改其在内存中的地址。您的意思可能是*this = *t或(更明确地)this->x = t->x。 -
@Peter,请在答案部分回答。
-
@Someprogrammerdude 即使使用多态性,通常也可以使用引用而不是指针。在您希望能够重新绑定引用的各种情况下,指针仍然很有用,但即便如此,智能指针而不是原始指针通常也是正确的选择。