gpt4 book ai didi

c++ - 为什么此代码在第 1 行显示错误左值?如何解决?

转载 作者:太空宇宙 更新时间:2023-11-04 15:57:24 25 4
gpt4 key购买 nike

#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 指针,因为它是一个 prvalue .

this 指针是一个常量指针,保存当前对象的内存地址。因此, this 在您的情况下属于 const Test* 类型,因此无法将其分配给。这样做(如果允许的话)将有效地允许一个对象更改它自己在内存中的地址,正如@Peter 提到的那样。

注意:const Test*是一个指向常量对象的指针。它指向的对象是常量,而不是指针本身。

PS: this->x = t->x; 可能就是你想说的。

关于c++ - 为什么此代码在第 1 行显示错误左值?如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com