关于容器中元素的引用

时间:2013-03-02 17:05:57

标签: c++ reference containers

有人能告诉我函数是否可以安全地返回容器中元素的引用(即Type&)(例如boost::unordered_map)?

如果我们可以这样做,为什么?因为我认为引用类型的工作方式与指针相同(如果我错了就纠正我),并且容器中元素的内存地址可能会随着时间的推移而改变,所以如果引用它不再像以前那样。我是对的吗?

如果可以,我们可以返回容器中元素的指针吗?

我有这个问题,因为我看到这种情况发生在别人的代码中,而且效果很好......

1 个答案:

答案 0 :(得分:2)

取决于。

完全没问题,只要容器永远不会被修改。如果容器修改,那么每个容器类都有自己的规则,关于何时对现有元素的引用失效。

C ++标准是查找规则的官方方式,但在大多数情况下,您可以安全地阅读良好的在线参考(无双关语),例如http://cppreference.com。例如,我们知道std::vector::insert肯定会使对所有后续元素的引用无效,并且可能使对所有元素的引用无效。