#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