如何在C ++中为指针'this'赋值

时间:2012-11-20 15:49:01

标签: c++ this

在函数中,如何为this指定新值?

6 个答案:

答案 0 :(得分:27)

你做不到。

9.3.2 this指针[class.this]

  

1在非静态(9.3)成员函数的正文中,关键字 thisprvalue表达式,其值   是调用该函数的对象的地址。 [...](强调和联系我的)

您可以将对象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/