簡體   English   中英

雙重分配的評估順序

[英]Evaluation order of double assignment

我在我們的代碼庫中發現了一些東西,即使它從未失敗過,對我來說看起來並不“正確”。

我已經將代碼修剪成類似於鏈表的東西(數據結構比這復雜得多)。

Node * node = firstNode();

while( moreNodesAwaiting() )
{
    Node * newnode = giveMeAnotherNode();

    node = node->next = newnode ; // <-- This is what I don't like.
}

我不確定這里是否適用未定義的行為。 我們正在修改數據結構和序列點之間的指針,但這與修改值兩次不同。

此外,如果編譯器可以按任何順序計算表達式的元素,是否意味着它可以在賦值發生之前評估node-> next

為了以防萬一,我把它改為:

    node->next = newnode ;
    node = node->next    ;

這也強調了我們遍歷清單的事實。

作業從右向左相關。 換一種說法:

a = b = c;

被解析為

a = (b = c);

這個訂單是由標准保證的。

也就是說,對於原始類型,它會將c分配給ba 對於非基本類型,它將調用a.operator= (b.operator= (c))

暫無
暫無

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

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