【问题标题】:What does the -> (point to member) operator do?->(指向成员)运算符有什么作用?
【发布时间】:2013-06-09 15:22:34
【问题描述】:

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

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

示例将不胜感激。

【问题讨论】:

  • 您查看了哪些问题?你有什么不明白的?如果 StackOverflow 上还没有一个很好的答案,我会感到惊讶。
  • @jerry 左右两边是什么?我尝试在谷歌上查找它,但我没有设法掌握它的作用。
  • @EcoGiko:请不要在标题中放[SOLVED] 这样的垃圾。已接受答案的问题在 UI 中的样式已有所不同。

标签: c++ pointers operators


【解决方案1】:

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

编辑:

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

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

p-&gt;member-of-structure

指特定的成员。

【讨论】:

  • 使用->操作符有什么意义吗?它们有什么区别?
  • 一个优点是要计算的括号更少,尤其是在较长的表达式中。比较 a->b->c->d 与 (*(*(*a).b).c).d 的可读性和可写性。
【解决方案2】:

-&gt; 通常就是这样工作

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

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

但是,它可以按类重载,因此您可以在 shared_ptr 之类的东西上使用它。唯一的限制是您只能重载它以返回不同的解引用指针。例如

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

【讨论】:

  • 我明白了。所以它们是相同的?它只是调用成员吗?
  • 是的,使用指向对象的指针只是更少的手指工作。这非常有用,因为您在使用指针的大部分时间都在避免对象切片
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2017-06-28
  • 2022-01-16
  • 1970-01-01
  • 2012-01-23
  • 2018-03-24
相关资源
最近更新 更多