簡體   English   中英

指針和雙向鏈表

[英]Pointers and doubly-linked list

我目前在“編程:使用C ++的原理和實踐”的第17章,並且遇到了雙向鏈表上的代碼。 之前曾有人問過這組代碼問題(例如,雙向鏈接列表中的成員訪問權限 ),但是我沒有被問到/回答。

該代碼基本上將“ Freya”安排為“ Odin”的前身,並使“ Odin”成為“ Thor”的前身,反之亦然。 代碼如下:

struct Link {
string value;
Link* prev;
Link* succ;
Link(const string& v, Link* p = nullptr, Link* s = nullptr)
    : value(v), prev(p), succ(s) {}
};

int main()
{
    Link* norse_gods = new Link{ "Thor", nullptr, nullptr };
    norse_gods =       new Link{ "Odin", nullptr, norse_gods };

    norse_gods->succ->prev = norse_gods;
    norse_gods =       new Link{ "Freya", nullptr, norse_gods };

    norse_gods->succ->prev = norse_gods;

}

我想知道的是為什么代碼:

norse_gods =       new Link{ "Odin", nullptr, norse_gods }

能夠指向舊地址: new Link{ "Thor", nullptr, nullptr } ,並使Thor成為Odin的后繼者,因為norse_god應該已經指向新地址: new Link{ "Odin", nullptr, norse_gods } 我缺少一些命令,評估或概念嗎?

首先在右側進行評估,然后operator=進入並執行分配。 這是由operator=的優先級引起的。 請參閱C ++運算符優先級

main的第一行,您將創建一個名為“ Thor”的Link ,並將norse_gods指向該Link

在第二行中,您將創建一個名為“ Odin”和后繼項norse_godLink ,該Link在構建時仍指向Thor。

此后, norse_gods將更新為指向“ Odin”。

對於類似C的語言,此行為是正常的。

首先評估右側的表達式。 這將評估使用norse_gods的舊值。 評估完成后,便完成分配,並將對新創建對象的引用分配給norse_gods

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM