gpt4 book ai didi

c++ - 引用列表元素然后弹出它,它是未定义的行为吗?

转载 作者:行者123 更新时间:2023-12-04 16:35:43 25 4
gpt4 key购买 nike

我有这段代码,我想知道它是否有效或是否会导致未定义的行为:

#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();
}
}

我正在使用引用来避免重复已经存在的对。

一方面,我认为这可能是未定义的行为,因为我正在删除引用的元素,但另一方面,删除后我没有访问引用。

有效吗?

最佳答案

只要您不尝试在foo.pop_front(); 语句之后使用bar 引用,那么您就赢了' 得到未定义的行为,因为该引用在从容器中删除所引用的元素之前一直有效。

在您的情况下,pop 似乎是引用范围内的最后一条语句(在 while 循环的每次迭代中都会创建/形成一个新语句),因此不会' 似乎是个问题。

关于c++ - 引用列表元素然后弹出它,它是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70124226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com