STL函数中以引用获取迭代器是否可行?这段代码是否安全?
以引用形式接收STL容器find返回的迭代器是否可行?
这段代码const auto& it = container.find( value );是安全的,不会因为绑定临时对象导致迭代器悬空,原因如下:
- STL容器的
find成员函数返回的是一个迭代器值对象,当把这个临时返回值绑定到const左值引用时,C++标准会将该临时对象的生命周期延长至引用的生命周期结束。 - 在
it的作用域内,这个迭代器的有效性和用值接收(比如auto it = container.find(value);)完全一致,不会出现悬空问题。
需要注意:迭代器的有效性本质依赖于容器的状态,和接收方式无关。如果后续容器被销毁,或者执行了会导致迭代器失效的操作(比如vector扩容、map删除对应元素等),无论用引用还是值存储的迭代器都会失效。
内容的提问来源于stack exchange,提问作者sunkue
相关产品推荐
相关产品推荐

