有關於函式返回指標
也就是 int func1() 和 int &func2() 的差別
一般而言
假設{}內容都是return n;
int func1() 所返回的值會先放至在一個暫時性變數TP中
這個TP會再進入func1時生成,出來結束指令後消失
所以可以用一個變數去接
例如: int a = func1();
會變成 N -> TP -> a
TP會再將值傳入a後,即被delete掉。
所以 如果是用 int &a = func1();
a指到的會是個被delete掉的非法區域
而int &func2()使用方式較不一樣
內容假設一樣為 return n;
差別在這次並不會產生暫時變數TP
所以執行 int &a = func2();
會直接變成
n -> a
迴傳的值會存在該行當中
此時,如果n為全域變數 或者 經由外部參照近來的值
則會合法存在
也就可以使出下列用法
例如: func2()=9l;
func2()在執行完後,會變成一個已經早已存在的全域值的位置
但如果n是func2()的內部變數
此實執行 func2()=9l;的話
91會被放到被delete掉的n的位置
變成非法給值
=================================================
以下是網路上找到的一個使用例子
=================================================
來源:http://zhidao.baidu.com/question/58852657.html?fr=qrl&fr2=query
by Keng-li.Lin
沒有留言:
張貼留言