看板 C_and_CPP 關於我們 聯絡資訊
環境vs2005 我看到有類似下面的程式碼,回傳區域的結構變數, 跑起來也沒問題,但這寫法事實上到底正不正確? typedef struct AAA { int a; int b; } StructAAA; StructAAA fun(void) { StructAAA a; a.a =1; a.b =2; return a; } void main() { StructAAA b; b = fun(); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.141.172
james732:不要傳區域變數的address就好 這樣寫它都會複製一份 06/19 02:07
QQ29:如果函式長這樣 int& fun(){int b return b;} int c=func(); 06/19 02:37
QQ29:這種寫法會有安全性的問題嘛 我最後c會copy一份不是嘛? 06/19 02:37
QQ29:還是說copy之前就有機會 b值就不見了? 06/19 02:38
legnaleurc:non-static local reference 通常 compiler 會有警告 06/19 02:55
legnaleurc:考慮 int & c = func(); 的狀況 06/19 02:56
legnaleurc:甚至是 func() = c; 06/19 02:56
zlw:二樓寫法func()優先權比較高會先執行,最後把b的值0xcccccccc 06/19 03:36
zlw:mov到暫存器eax去,就完成return b;動作。然後c從eax接受該值 06/19 03:37
zlw:所以return的東西實際上是到eax去取,而不是到b的記憶體位置取 06/19 03:38
zlw:當然函數內部是不會在b消失之前,都還沒讓return b放到eax發生 06/19 03:39
davidyu:可以compile就是正確啊,只是不見得是你要的結果 06/19 04:44