這裏是「有效STL」的報價:集裝箱正面和背面行爲
當你從一個容器中得到一個對象(通過例如,前面或後面),你設置什麼是副本是什麼包含了 。拷入,拷出。這是STL的方式。
我已經很難理解這部分。據我所知,front返回第一個元素的引用(至少對於std::vector
)。 你能解釋一下上面的句子嗎?
這裏是「有效STL」的報價:集裝箱正面和背面行爲
當你從一個容器中得到一個對象(通過例如,前面或後面),你設置什麼是副本是什麼包含了 。拷入,拷出。這是STL的方式。
我已經很難理解這部分。據我所知,front返回第一個元素的引用(至少對於std::vector
)。 你能解釋一下上面的句子嗎?
這樣的說法的想法是,當你想從容器中獲取一個元素,你不保留一個引用或指向容器中的元素的指針,你創建它的副本(從引用那些方法返回)。 該函數返回back()
和front()
是次要問題,可能會混淆該問題 - 即使錯誤也沒有提及它們的提及。
容器可以進行重新分配(尤其是vector
),並且您不一定收到容器的通知,元素將移動到內存中,並突然導致無效的引用或指針。
記住建議的時間,在移動語義和可移動對象等之前。但是一般原則仍然適用,不要保留對可能失效的對象的引用或指針。
「價值語義」是一個強大的主題,不僅貫穿標準庫,而且貫穿整個C++。
這實際上是本書早期版本中的錯誤。從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,時間拿到新版本!
這本書在哪裏?我想嘗試找到它 –
這是從項目3引用。使複製廉價和正確的容器中的對象。 –
自從我讀過Effective STL以來,已經有一段時間了,但是Scott Myers對它更多地表達了意思,並且這個上下文不在問題中,或者本書未針對C++ 11及更高版本進行更新。 – StoryTeller