比方說,我們有超過分配給堆空間內存指針列表的迭代器(ITER),如果我這樣做C++運算符優先級
delete (*iter++)
我是正確的優先級是第一個提領迭代器取得內存地址然後釋放空間,然後增加迭代器釋放下一個元素?
比方說,我們有超過分配給堆空間內存指針列表的迭代器(ITER),如果我這樣做C++運算符優先級
delete (*iter++)
我是正確的優先級是第一個提領迭代器取得內存地址然後釋放空間,然後增加迭代器釋放下一個元素?
的效果是你寫的,但它使用一個稍微不同的順序來實現:
的後遞增具有最高的優先級,所以它的第一評價。但是,其返回值(由其他運營商處理)的值爲iter
之前的的增量。
下一步評估解除引用,返回iter
未增加的值「指向」的指針。
delete
最後被評估,指針被刪除。
雖然++
has higher precedence than *
,後期增量++
的副作用後應用的引用操作*
採用了迭代器的值。這是後增量行爲,或後綴++
(與預增量相反,或前綴++
)。這條規則適用於迭代器以及「普通」指針。
該生產線是相同的:
delete (*(iter++))
但由於後綴增量返回原來的價值,你還在提領的iter
原始值。因此,如果iter
指向指向動態分配對象的指針,則delete
將銷燬該對象。然後iter
會一直指向下一個指針。
的優先實際上是反向,並且如果所述迭代器類型(帶重載操作符)的,這是調用給操作者功能的順序:
iter
用於調用的列表項的值。
不要編寫需要太多的代碼,但要弄清楚發生了什麼 - 最好將其分散到幾行。這樣你可以防止現在或將來的錯誤。 – 2013-03-08 13:47:34
爲了確保我能理解幕後發生的事情...... – user1845360 2013-03-08 13:56:30