4

-- または ++ 演算子を使用して現在の構造体のアドレスを変更することは可能ですか?

mystruct* test = existing_mystruct;
test++ // instead of using: test = test->next_p;

私はこれを使用しようとしていましたが、それは const のようで、エラーが発生します: これへの割り当て (アナクロニズム):

struct mystruct {
    mystruct* next_p;
    mystruct* prev_p;

    void operatorplusplus  () { this = next_p; }
    void operatorminusminus() { this = prev_p; }
};
4

2 に答える 2

4

オブジェクトは、存在している間、メモリ内に一定のアドレスを持っています。ただし、それらを新しいアドレスにコピーすることはできます。

あなたがやろうとしているのは、リンクされたリストを進めることです。また、それらの演算子をオーバーロードすると、それらの演算子で実行される場合があります。ただし、リスト ノードをラップするには、特別なハンドル クラスでそれを定義する必要があります。

編集

私が説明するコードは、次のようになります。

class mylist
{
  struct mynode
  {
    //data
    mynode* next;
    mynode* prev;
  } *curr;

public:
 mylist& operator++() {curr = curr->next; return *this;}
};

当然、境界チェックなどを行いたいと思うでしょうが、それが一般的な考え方です。

于 2012-10-05T17:15:42.163 に答える
1

いいえ。thisポインタは 型mystruct * constです。つまり、そのアドレスは変更できません。

于 2012-10-05T17:16:21.053 に答える