什么 - > (指向会员)运营商吗?

时间:2013-06-09 15:22:35

标签: c++ pointers operators

我有一个链接列表程序,其中我看到了很多 - >操作员,但我不知道他们做了什么。我在这里和那里搜索了他们,但我发现的只是成员操作员的一点,它做了一些事情(我没有完全理解什么和为什么)。这里是链接列表中的代码片段,您能解释一下此运算符的工作原理吗?

#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;
}

非常感谢例子。

2 个答案:

答案 0 :(得分:4)

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

修改

来自Kernighan和Ritchie的“C编程语言”

  

指向结构的指针经常被使用,因此提供替代符号作为速记。如果p是   指向结构的指针,然后

     

p->member-of-structure

     

指特定成员。

答案 1 :(得分:3)

-> 通常就像这样

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

这就是你的例子中所做的一切。

但是每个类都可以重载,因此您可以在shared_ptr之类的内容上使用它。唯一的限制是你只能重载它以返回一个指向取消引用的不同指针。例如

class Foo {
      int* super_special_ptr;
    public:
      int* operator->(){ return super_special_ptr; }
};