[英]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_god
的Link
,該Link
在構建時仍指向Thor。
此后, norse_gods
將更新為指向“ Odin”。
對於類似C的語言,此行為是正常的。
首先評估右側的表達式。 這將評估使用norse_gods
的舊值。 評估完成后,便完成分配,並將對新創建對象的引用分配給norse_gods
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.