容器正面和背面行为

Container front and back behavior

本文关键字:背面      更新时间:2023-10-16

这是"Effective STL"的引文:

当您从容器(例如,正面或背面(获取对象时,您设置的内容是过去的副本 包含。抄入,抄出。这就是STL的方式。

我很难理解这部分。据我所知,front返回第一个元素的引用(至少对于std::vector(。你能解释一下上面的句子吗?

这实际上是本书早期版本的错误。从勘误表:

! 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.

所以这句话的解释是:哎呀,是时候换个新版本了!

像这样的语句的想法是,当你想从容器中获取一个元素时,你不会在容器中保留对该元素的引用或指针,而是创建它的副本(从这些方法返回的引用中(。函数返回,对于back()front(),是次要问题,可能会混淆问题 - 甚至勘误表也删除了对它们的提及

容器可以进行重新分配(尤其是vector(,容器不一定会通知您,元素在内存中移动,突然间您有一个无效的引用或指针。

在移动语义和可移动对象等之前,请记住建议的时间。但一般原则仍然适用,不要保留对可能变得无效的对象的引用或指针。

"价值语义"是一个强大的主题,不仅贯穿标准库,而且贯穿整个C++。