[問題] call by reference是怎實現的呢?

看板C_and_CPP作者 (啤酒肚)時間15年前 (2010/11/03 01:52), 編輯推噓7(7010)
留言17則, 8人參與, 最新討論串1/1
小弟是從不用這東西,個人以為,這東西會讓 函數的使用者忘了變量的值是會被改變的。 組語不是都在call by value嗎? 給定位置,然後去把該位置的質copy到寄存器上 call by reference 是怎樣實作的呢? 是編譯器把代碼轉成by value,再編為匯編語言麼? 還是就直接開塊內存,把該by reference的變量, 寫死在該位置上面,要調用時就直接叫cpu copy該位置的值到 寄存器上面? 貌似第一種可以性比較高。 還請很懂匯編語言高手釋疑,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.143.194

11/03 02:05, , 1F
變量 匯編 內存 寄存器
11/03 02:05, 1F

11/03 02:37, , 2F
11/03 02:37, 2F

11/03 02:46, , 3F
其實你可以讓編譯器編出彙編語言看看,
11/03 02:46, 3F

11/03 02:46, , 4F
就會發現 reference 實值上也是用指針來實現的
11/03 02:46, 4F

11/03 02:51, , 5F
編譯器把他當指標,只不過遇到x.val自動視為x->val,遇到
11/03 02:51, 5F

11/03 02:52, , 6F
int n=x; 編譯器也自動視為 int n=*x;
11/03 02:52, 6F

11/03 06:48, , 7F
TAIWAN TAIPEI @_@
11/03 06:48, 7F

11/03 08:13, , 8F
原本的 C++ 程式碼: http://codepad.org/zrRH4OQF
11/03 08:13, 8F

11/03 08:14, , 9F
11/03 08:14, 9F

11/03 08:15, , 10F
使用 gcc 4.4, 樓主可以自己觀察看看 @_@
11/03 08:15, 10F

11/03 08:46, , 11F
我只是單純的把它當作是穿上糖衣的指標....XDDD
11/03 08:46, 11F

11/03 15:05, , 12F
那你覺得剝去糖衣的作法應該是什麼?
11/03 15:05, 12F

11/03 18:22, , 13F
用指標實現 (完)
11/03 18:22, 13F

11/03 22:35, , 14F
As constant pointer, 收工
11/03 22:35, 14F

11/04 07:42, , 15F
用constant pointer的意思是,要知道哪些呼叫端變數被ref.
11/04 07:42, 15F

11/04 07:43, , 16F
把那些做成固定位址的東西嗎?
11/04 07:43, 16F

11/04 14:04, , 17F
s 大的意思是reference初始後, 不能改參考到其他物件
11/04 14:04, 17F
文章代碼(AID): #1Cq4_goK (C_and_CPP)