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