c++ - 为什么此代码显示第 1 行所需的错误左值?如何解决?
问题描述
#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;
大概就是你想说的。
推荐阅读
- photoshop - 减法混合模式
- javascript - 开发服务器返回响应错误代码:500 react-native 为什么这个错误谁能告诉我
- apache-spark - 如何使用火花数据框在pyspark中构建以下json结构
- cypress - 赛普拉斯是 API 自动化测试的好选择,而不是放心/空手道吗?
- javascript - JavaScript For循环填充数组
- php - 如何为使用 JS 创建的类设置样式
- elasticsearch - 子文档上的嵌套过滤器,每个文档的字段的最大值
- hibernate - 在 Kotlin 中编写 REST 资源时如何避免冗余?
- go - fmt 库 %T 可以理解
- prometheus - grafana dashboard如何过滤Zipkin(tracing,Explore)指标?