gpt4 book ai didi

c++ - 为什么创建新列表后 std::list::front 结果会发生变化?

转载 作者:行者123 更新时间:2023-12-01 13:30:15 26 4
gpt4 key购买 nike

在下面的代码中,为什么 list_front调用后更改gen_list第二次? gen_list正在创建一个新列表,这如何改变以前的列表头?

#include <iostream>
#include <list>

std::list<int> gen_list()
{
static int s_count = 0;
std::list<int> result;
for (int i = 0; i < 5; i++)
{
result.push_back(s_count++);
}
return result;
}

int main()
{
const auto& list_front = gen_list().front();
std::cout<<list_front<<"\n";
gen_list();
std::cout<<list_front<<"\n";
}

结果:
0
9

Demo

最佳答案

您需要绑定(bind)到临时std::list<int>gen_list() 返回:

const auto& list = gen_list();
const auto& list_front = list.front();

否则, std::list<int>将在表达式的末尾被销毁,并且您将有一个悬空引用。任何使用悬空引用都会使您的程序具有未定义的行为。

关于c++ - 为什么创建新列表后 std::list::front 结果会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60619389/

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