1

我有一个链表程序,在其中我看到了很多 -> 运算符,但我不知道它们是做什么的。我到处搜索它们,但我发现的只是指向成员运算符的一个点它做了一些事情(我不完全理解是什么以及为什么)。这是来自链接列表的代码片段,你能向我解释一下这个运算符是如何工作的吗?

#include <iostream>
using namespace std;
template<class T>
class List{
struct Element{
    T data_;
    Element* next_;
    Element* prev_;

    Element(T val)
        :data_(val),
        next_(NULL),
        prev_(NULL)
        {}

};
Element* head_;

这就是我正在使用的结构,下面是一个简单的 push_back 函数。

void push_back(T val){
    Element* newElement = new Element(val);
    Element* back = head_->prev_;

    back->next_ = newElement;
    newElement->prev_ = back;

    newElement->next_ = head_;
    head_->next_ = newElement;
}

int main(){
    List<int> l;
    l.push_back(40);

    return 0;
}

示例将不胜感激。

4

2 回答 2

4

默认情况下,->运算符是取消引用指针和访问成员的简写。C 例如,给定声明Element* back, thenback->next等价于(*back).next.

编辑:

来自 Kernighan 和 Ritchie 的“The C Programming Language”

指向结构的指针如此频繁地使用,以至于提供了另一种表示法作为简写。如果 p 是指向结构的指针,则

p->member-of-structure

指特定的成员。

于 2013-06-09T15:27:28.683 回答
3

-> 通常就像这样工作

foo->bar() ====> (*foo).bar()

这就是它在您的示例中所做的一切。

但是,它可以按类重载,因此您可以在shared_ptr. 唯一的限制是您只能重载它以返回不同的取消引用指针。例如

class Foo {
      int* super_special_ptr;
    public:
      int* operator->(){ return super_special_ptr; }
};
于 2013-06-09T15:26:02.740 回答