为什么创建新列表后 std::list::front 结果会改变?

Epi*_*pic 5 c++

在下面的代码中,为什么第二次list_front调用后会发生变化gen_listgen_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";
}
Run Code Online (Sandbox Code Playgroud)

结果:

0
9
Run Code Online (Sandbox Code Playgroud)

演示

Ted*_*gmo 5

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

const auto& list = gen_list();
const auto& list_front = list.front();
Run Code Online (Sandbox Code Playgroud)

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