理解:不能返回局部變量的引用

#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

相關文章
相關標籤/搜索