24

在函数中,如何分配this新值?

4

6 回答 6

41

您可以在以下位置分配对象this点:

*this = XY;

但是您不能分配 的直接值this

this = &XY;   // Error: Expression is not assignable
于 2012-11-20T15:56:22.610 回答
40

你不能。

9.3.2 this指针[class.this]

1 在非静态 (9.3) 成员函数的主体中,关键字this纯右值表达式,其值是调用该函数的对象的地址。[...](强调和链接我的)

您可以修改对象this指向,即*this. 例如:

struct X
{
   int x;
   void foo()
   {
     this->x =3;
   }
};

该方法修改对象本身,但类似的东西this = new X是非法的。

于 2012-11-20T15:49:45.520 回答
20

很久以前,在第一个 C++ 标准发布之前,一些编译器实现允许您在构造函数中编写以下代码:

this = malloc(sizeof(MyClass)); // <<== No longer allowed

该技术是控制对象类分配的唯一方法。这种做法已被标准禁止,因为 的重载operator new已经解决了过去通过分配 to 来解决的问题this

于 2012-11-20T16:02:28.483 回答
3

你不能。如果您觉得有必要这样做,也许您应该编写一个将类指针作为第一个参数的静态方法。

于 2012-11-20T15:51:15.113 回答
2

this您不能为指针赋值。如果您尝试将值分配给this某些东西,就像this = &a它会导致非法表达式一样

于 2012-11-20T15:50:25.890 回答
0

你不能。"this" 是一个类的每个成员函数的隐藏参数,它对于 X 类的对象的类型是 X* const。这显然意味着您不能将新值分配给“this”,因为它被定义为 const。但是,您可以修改 this 指向的值。有关详细信息,请参阅http://www.geeksforgeeks.org/this-pointer-in-c/

于 2015-06-21T04:21:45.643 回答