2012-10-05 47 views
4

是否可以使用改變我的當前結構的地址 - 或++運算符,即:通過++改變C++ struct的地址和 - 運營商

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

我試圖利用這一點,但它似乎是常量,給我一個錯誤:分配到這個(過時):雖然他們存在

struct mystruct { 
    mystruct* next_p; 
    mystruct* prev_p; 

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

'this =(anything)'很不可能在標準的編譯器中工作。 IIRC'this'被認爲是const。 – cHao

+2

@cHao:IIRC'this'是一個右值表達式,它比'const'更不易分配。 –

+0

歷史筆記:「這個」曾經是可以修改的,早在早期;在構造函數中賦予'this'就是今天放置新元素的類比。 –

回答

4

對象在內存中的常量地址。 但是,您可以將它們複製到新地址。

你試圖做的是在鏈表中前進。如果你超載了它們,這些操作可能會完成。但是你需要在一個特殊的句柄類中定義這個類來包裝列表節點。

編輯

代碼爲我描述看起來有點像這樣:

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

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

當然你會想要做boundry檢查,這樣,但這是一般的想法。

+0

謝謝你的回答。所以有可能重載這些運算符的指針指向這個結構? – Ronny

+0

這是可能的如果你想在列表中前進,你需要一個手柄 給我一秒來編輯我的答案 – StoryTeller

+0

真棒,那就是我一直在尋找的,謝謝! – Ronny

1

this指針類型爲mystruct * const,這意味着它的地址是不可更改的。