集装箱前后行为

时间:2017-02-07 18:59:39

标签: c++ stl effective-c++

以下是“Effective STL”的引用:

  

当您从容器中获取对象时(通过例如前面或后面),您设置的是一个副本       遏制。复制,复制出来。这是STL方式。

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

2 个答案:

答案 0 :(得分: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,是时候换新版了!

答案 1 :(得分:2)

这样的声明的想法是,当你想从容器中获取一个元素时,你没有保留一个引用或指向容器中元素的指针,你创建了一个它的副本(从引用那些方法返回)。 对于back()front(),函数返回是次要问题,可能会混淆问题 - 即使勘误表中删除了提及它们

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

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

“Value semantics”是一个强大的主题,它不仅运行在标准库中,而且运行在整个C ++中。