#include <iostream>
int& Test(int i) {
int j = 100;
int &ji = j;
return ji;
}
void echo() {
std::cout << "hello world." << std::endl;
}
int main() {
int &tmp = Test(10);
std::cout << tmp << std::endl;
echo();
std::cout << tmp << std::endl;
return 0;
}
复制代码
输出结果:ios
100
hello world.
0
复制代码
分析:c++
所谓不能返回局部变量,是指局部变量在栈空间中分配内存,函数返回时栈指针回退,当主调函数继续调用其它被调函数时,
栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,若是此时再引用原来的局部变量就会出现不可预见的结果。
(详细能够参考论坛:http://bbs.csdn.net/topics/340148806)
其实函数调用结束,栈并不必定当即销毁,若是调用结束,主调函数又去调用其余函数,这时栈数据就会被销毁了.
复制代码
返回引用:bash
const string &mainp(const string &s) {
string ret = s;
return ret
}
复制代码
概念:const string & mainp()返回引用不是看return返回什么而是看函数的返回类型,所以这里是返回局部变量的引用。函数
引用是指一个变量的别名,其本质上其实也是指针,只是不能改变其指向的地址而已。ui