2017-02-07 54 views
3

這裏是「有效STL」的報價:集裝箱正面和背面行爲

當你從一個容器中得到一個對象(通過例如,前面或後面),你設置什麼是副本是什麼包含了 。拷入,拷出。這是STL的方式。

我已經很難理解這部分。據我所知,front返回第一個元素的引用(至少對於std::vector)。 你能解釋一下上面的句子嗎?

+2

這本書在哪裏?我想嘗試找到它 –

+0

這是從項目3引用。使複製廉價和正確的容器中的對象。 –

+0

自從我讀過Effective STL以來,已經有一段時間了,但是Scott Myers對它更多地表達了意思,並且這個上下文不在問題中,或者本書未針對C++ 11及更高版本進行更新。 – StoryTeller

回答

2

這樣的說法的想法是,當你想從容器中獲取一個元素,你不保留一個引用或指向容器中的元素的指針,你創建它的副本(從引用那些方法返回)。 該函數返回back()front()是次要問題,可能會混淆該問題 - 即使錯誤也沒有提及它們的提及

容器可以進行重新分配(尤其是vector),並且您不一定收到容器的通知,元素將移動到內存中,並突然導致無效的引用或指針。

記住建議的時間,在移動語義和可移動對象等之前。但是一般原則仍然適用,不要保留對可能失效的對象的引用或指針。

「價值語義」是一個強大的主題,不僅貫穿標準庫,而且貫穿整個C++。

5

這實際上是本書早期版本中的錯誤。從errata

! 6/29/01 jk  20 The first para of Item 3 is incorrect: front  7/25/04 
        and back do NOT return copies of elements, they 
        return references to elements. I 
        removed all mention of front and back. 

所以這句話的解釋是:woops,時間拿到新版本!