有人能告诉我函数是否可以安全地返回容器中元素的引用(即Type&
)(例如boost::unordered_map
)?
如果我们可以这样做,为什么?因为我认为引用类型的工作方式与指针相同(如果我错了就纠正我),并且容器中元素的内存地址可能会随着时间的推移而改变,所以如果引用它不再像以前那样。我是对的吗?
如果可以,我们可以返回容器中元素的指针吗?
我有这个问题,因为我看到这种情况发生在别人的代码中,而且效果很好......
答案 0 :(得分:2)
取决于。
完全没问题,只要容器永远不会被修改。如果容器被修改,那么每个容器类都有自己的规则,关于何时对现有元素的引用失效。
C ++标准是查找规则的官方方式,但在大多数情况下,您可以安全地阅读良好的在线参考(无双关语),例如http://cppreference.com。例如,我们知道std::vector::insert
肯定会使对所有后续元素的引用无效,并且可能使对所有元素的引用无效。