use*_*391 9 c++ stack function
一个基本问题,我不确定答案.以下功能是否有效?
std::vector<int> & test_function() {
   std::vector<int> x;
   // do whatever
   return x;
}
如果是这样,为什么?函数返回后,程序不应该从堆栈中删除x吗?谢谢.
函数格式正确(语法正确),但只要函数返回,返回的引用就无效,无法使用.
澄清一下:有问题的代码不会调用任何未定义的行为.只要不使用返回值,就可以安全地调用此函数,例如,这是有效的:
test_function(); // ok
但是,如果您尝试使用返回值(即,使用它初始化另一个引用或将引用对象复制到另一个对象),那么您将调用未定义的行为,因为引用对象(对象x)的生命周期将结束(x将在函数返回,因为它是一个自动变量):
std::vector<int>& vec = test_function(); // undefined
std::vector<int> vec = test_function();  // undefined