f22*_*222 3 c++ undefined-behavior language-lawyer
我有这段代码,我想知道它是否有效或可能导致未定义的行为:
#include <list>
#include <utility>
void myFunction(std::list<std::pair<int, int>> foo)
{
while (foo.size())
{
std::pair<int, int> const &bar = foo.front();
//work with bar
foo.pop_front();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用引用来避免重复已经存在的对。
一方面,我认为这可能是未定义的行为,因为我正在删除引用的元素,但另一方面,在删除它后我不会访问该引用。
有效吗?
只要您不尝试在语句之后使用引用,bar那么您就不会得到未定义的行为,因为该引用保持有效,直到从容器中删除引用的元素为止。foo.pop_front();
在您的情况下,弹出似乎是引用范围中的最后一个语句(将在循环的每次迭代中创建/形成一个新语句while),因此这似乎不是问题。
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |