在下面的代码中,为什么第二次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";
}
Run Code Online (Sandbox Code Playgroud)
结果:
0
9
Run Code Online (Sandbox Code Playgroud)
您需要绑定到由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>将在表达式结束时销毁,您将有一个悬空引用。悬空引用的任何使用都会使您的程序具有未定义的行为。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |