以下是“Effective STL”的引用:
当您从容器中获取对象时(通过例如前面或后面),您设置的是一个副本 遏制。复制,复制出来。这是STL方式。
我很难理解这部分内容。据我所知,front返回第一个元素的引用(至少对std::vector
而言)。
你能解释一下上面的句子吗?
答案 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 ++中。