如何在C++中为此指定指针?

mil*_*los -1 c++ oop

我正在尝试实现treap类,所以我有这个代码:

void item::insert(item* it) {
     if (!this)
         this = it;
     .....
Run Code Online (Sandbox Code Playgroud)

我无法用GCC编译:

error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

我知道,我可以简单地分配给所有成员itthis,但有另一种方式?

Sho*_*hoe 5

根据§9.3.2/ 1:

在非静态(9.3)成员函数的主体中,关键字this是一个prvalue表达式,其值是调用该函数的对象的地址.

因此,this指针永远不会nullptr在非静态成员函数中,假设已从中调用成员函数的对象已正确分配(在空指针上调用成员函数的情况下,行为似乎未定义)).

第二:不要尝试更改this指针,因为它不可分配.有充分的理由.

  • @VladfromMoscow你错了,那只是未定义的行为.达到`this == NULL`的情况的唯一方法是通过未定义的行为,因此无效. (3认同)