此指针和链表

This-pointer and linked list

提问人:user11654732 提问时间:10/5/2023 最后编辑:trincotuser11654732 更新时间:10/5/2023 访问量:96

问:

Stroustrup在“C++的设计与演进”中写道:

如果没有或某种等效机制,成员函数不能用于链表操作。this

他这是什么意思,它与现代编译器仍然相关吗?

我通常发现很难描述-pointer的有效用例,因为编译器通常在不使用.thisthis

C++ 链接列出 此内容

评论

1赞 Pepijn Kramer 10/5/2023
你的意思是为什么在实现 std::list 时需要(不要指望我们熟记 C++ 书籍,甚至不了解 Bjarne 的书)?也就是说,让编译器弄清楚自由函数模板和类模板的成员函数之间的区别。this->
2赞 john 10/5/2023
您正在谈论在 C++ 程序中使用关键字。我不确定 Bjarne 是否也在做同样的事情。他可能在谈论这个指针的概念,无论你是否实际使用这个关键字,它都存在。但需要更多的背景信息。thisthis
0赞 Pepijn Kramer 10/5/2023
我找到了参考资料。是的,它仍然相关,C++ 类的成员函数始终需要知道它们应该处理对象的哪个实例。为了能够重用已编译的代码,成员函数只编译一次,并且需要将标识函数需要处理的类实例的内容传递给函数。从理论上讲,这可能是任何唯一的,但只需传递指向对象的实例/数据的指针是最有效的。因此,成员函数总是获得隐式的第一个额外参数 - >指向对象的指针。这个指针叫做this
0赞 463035818_is_not_an_ai 10/5/2023
回答这个问题需要上下文。
1赞 molbdnilo 10/5/2023
这是一个非常奇怪的特定用例,但我认为他指的是像 .没有 ,对象就不能引用自身。that->next = this;this

答:

2赞 Joseph Larson 10/5/2023 #1

我不确定斯特鲁斯特鲁普博士的意图,但想象一个循环链表。创建第一个可能需要执行如下操作:

next = this;
prev = this;

您也不能有父子关系,其中孩子需要指向父项的指针:

Child * child = new Child;
child->parent = this;

您也无法编写正确的 operator= 函数,这些函数返回 *this。构建器模式也经常返回 this(作为参考 -- *this)。我是这样写我的二传手的:

Class & setFoo(int value) { foo = value; return *this; }

因为这样我就可以做到:

obj.setFoo(1)
   .setBar(2)
   .setZulu("Hello);

(大多数人写 setter 是为了返回 void,但我喜欢这种风格。

你用了很多。在有些回调情况下,您需要它,或者当您希望将自己作为参数传递给其他对象的调用时。this