3

以下是“有效 STL”的引述:

当您从容器中获取对象时(例如,通过正面或背面),您设置的是所包含内容的副本。复制进来,复制出去。这就是 STL 的方式。

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

4

2 回答 2

5

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

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

所以这句话的解释是:哇,是时候出新版了!

于 2017-02-07T19:24:28.790 回答
2

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

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

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

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

于 2017-02-07T19:08:58.190 回答