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* backback->nextは と同等(*back).nextです。

編集:

Kernighan と Ritchie の「C プログラミング言語」より:

構造体へのポインタは非常に頻繁に使用されるため、省略形として別の表記法が提供されています。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 に答える