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