[問題] call function用reference取代pointer

看板C_and_CPP作者 (Zoxge)時間14年前 (2012/01/07 15:34), 編輯推噓4(4017)
留言21則, 11人參與, 最新討論串1/2 (看更多)
請問一個觀念上的問題 什麼情況下會想要使用call by reference呢?是只有在引數想要跟著變的時候嗎? 那什麼情況下會想要使用call by pointer? 最近聽到一個說法:以call by reference取代call by pointer 理由好像是比較不會出錯 但是小弟百思不得其解,這樣做真的有比較好嗎? 速度有比較快嗎?實際寫code會比較容易嗎? 不知道大家對這個說法有什麼樣的意見? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.12.118

01/07 15:46, , 1F
語法較簡單(不必星號與箭號)
01/07 15:46, 1F

01/07 15:47, , 2F
ref不能是null,所以不用檢查
01/07 15:47, 2F

01/07 15:49, , 3F
一時能想到的是這樣,雖然我覺得第一點未必好事
01/07 15:49, 3F

01/07 15:51, , 4F
傳遞 first addr. of array 時,認為用 pointer 較佳。
01/07 15:51, 4F

01/07 15:52, , 5F
是否以前有人提過C只有call by value?記得曾看人解釋過..
01/07 15:52, 5F

01/07 15:52, , 6F
速度較快沒聽說過,不過之前版上有人拆asm似乎沒差多少.
01/07 15:52, 6F

01/07 15:54, , 7F
#1AFaSAAX,原來是這篇。
01/07 15:54, 7F

01/07 16:11, , 8F
比較直觀 比較帥 XDD
01/07 16:11, 8F

01/07 16:19, , 9F
指標是惡魔,看不到惡魔就算是好事吧XD
01/07 16:19, 9F

01/07 16:50, , 10F
樓上的,但是惡魔還是藏在細節裡,只是你看不到而已...
01/07 16:50, 10F

01/07 17:11, , 11F
眼不見為淨顆顆
01/07 17:11, 11F

01/07 18:03, , 12F
傳參照就是傳指標啊,compiler自動幫你加&和*而已
01/07 18:03, 12F

01/07 21:19, , 13F
call by reference有個麻煩的地方,就是光看函式呼叫
01/07 21:19, 13F

01/07 21:19, , 14F
會看不出引數到底有沒有被改到 還要跳到函式定義看一下
01/07 21:19, 14F

01/07 21:21, , 15F
才能確定 而c語言如果要改的話引數會加取址 很好看出來
01/07 21:21, 15F

01/07 21:39, , 16F
reference 是必改的吧?不就是突變的 const pointer ?
01/07 21:39, 16F

01/07 21:46, , 17F
reference不會改到?
01/07 21:46, 17F

01/07 21:55, , 18F
pointer也一樣啊,如果你傳const pointer那內容不會動
01/07 21:55, 18F

01/07 21:56, , 19F
而你還是要跳到function宣告才知道是不是const pointer
01/07 21:56, 19F

01/08 09:01, , 20F
原則上我都盡量用reference,除非必要才用pointer...
01/08 09:01, 20F

01/11 23:46, , 21F
可以參考Google c++ coding style裡有寫到原因,還蠻不錯
01/11 23:46, 21F
文章代碼(AID): #1F1_M7h7 (C_and_CPP)
文章代碼(AID): #1F1_M7h7 (C_and_CPP)