在函数中,如何为this
指定新值?
答案 0 :(得分:27)
你做不到。
1在非静态(9.3)成员函数的正文中,关键字
this
是prvalue表达式,其值 是调用该函数的对象的地址。 [...](强调和联系我的)
您可以将对象this
修改为*this
。例如:
struct X
{
int x;
void foo()
{
this->x =3;
}
};
该方法会修改对象本身,但this = new X
之类的内容是非法的。
答案 1 :(得分:25)
您可以在以下位置指定对象this
点:
*this = XY;
但您无法指定this
的直接值:
this = &XY; // Error: Expression is not assignable
答案 2 :(得分:17)
很久以前,在第一个C ++标准发布之前,一些编译器实现允许您在构造函数中编写以下代码:
this = malloc(sizeof(MyClass)); // <<== No longer allowed
该技术是控制对象类分配的唯一方法。标准禁止这种做法,因为operator new
的重载已经解决了以前this
的分配所解决的问题。
答案 3 :(得分:3)
你做不到。如果您认为有必要这样做,那么您应该编写一个静态方法,将类指针作为它的第一个参数。
答案 4 :(得分:2)
您无法为this
指针赋值。如果您尝试将值分配给this
this = &a
之类的内容,则会导致非法表达
答案 5 :(得分:0)
你做不到。 “this”是类的每个成员函数的隐藏参数,类X的对象的类型是X * const。这显然意味着您不能将新的值分配给“this”,因为它被定义为const。但是,您可以修改此指向的值。有关详细信息,请参阅http://www.geeksforgeeks.org/this-pointer-in-c/。