[問題] 另類的call by reference

看板C_and_CPP作者 (奇怪 還沒收到??)時間14年前 (2010/04/27 20:56), 編輯推噓4(4019)
留言23則, 9人參與, 最新討論串1/1
請問 我以前學到的call by reference都是要宣告兩個ptr去指向變數的位置 為什麼這樣子也行的通? **************************************** **宣告: void swap(int &v1,int &v2); **main裡面: swap(a,b); cout<<a <<b <<endl; **Definition of Swap: void swap(int &v1,int &v2) { int temp; cout<<v1 <<v2 <<endl; temp = v1; v1 = v2; v2 = temp; } ********************************** 經過測試,發現在swap function裡面 v1 v2顯示的居然不是 位置... 這裡沒有用到任何ptr... 1. 為什麼行的通? 2. v1 v2 到底是普通變數還是甚麼? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.22.26

04/27 20:57, , 1F
你可以當作 v1 與 a 是同一個東西 v2 與 b 是同一個東西
04/27 20:57, 1F

04/27 21:00, , 2F
親愛的compiler到底是怎麼運作的阿....煩...
04/27 21:00, 2F

04/27 21:02, , 3F
其實 user 不用管 compiler 怎麼做
04/27 21:02, 3F

04/27 21:02, , 4F
(我以前一直很想知道 後來倒是不管它了 XDDD)
04/27 21:02, 4F

04/27 21:07, , 5F
請問J大 那這樣的功能 可以把指標的地位取代掉嗎?...
04/27 21:07, 5F

04/27 21:08, , 6F
我也在想C++有沒有可能完全不用pointer...XDD
04/27 21:08, 6F

04/27 21:09, , 7F
不過有點難 畢竟reference一定要初始化又不能改變
04/27 21:09, 7F

04/27 21:20, , 8F
其實就是用 pointer 同原理實作,只是 syntax sugar。
04/27 21:20, 8F

04/27 21:21, , 9F
strategy pattern 就不可能只用 C++ reference 實作了。
04/27 21:21, 9F

04/27 21:21, , 10F
乖乖用 pointer 吧,我反而很少寫 reference。
04/27 21:21, 10F

04/27 21:22, , 11F
因為很容易出現 a->foo().bar() 這種 code。
04/27 21:22, 11F

04/27 21:22, , 12F
要就 -> 一路到底。
04/27 21:22, 12F

04/27 21:22, , 13F
上上行的例子其實是 a.foo()->bar() 比較常見。
04/27 21:22, 13F

04/27 22:09, , 14F
推樓上精闢
04/27 22:09, 14F

04/27 22:21, , 15F
問? 為什麼 strategy pattern 不能只用 ref 實作 @@?
04/27 22:21, 15F

04/27 23:06, , 16F
欸..就算你要用CRTP做 this指標還是指標啊
04/27 23:06, 16F

04/27 23:06, , 17F
而且CRTP沒辦法做到動態多型吧
04/27 23:06, 17F

04/27 23:22, , 18F
不要理我,我傻了 XDDDDDDD
04/27 23:22, 18F

04/27 23:55, , 19F
CRTP 就是要避免虛擬呼叫阿 幹麻去想要達到動態多型
04/27 23:55, 19F

04/28 00:27, , 20F
strategy pattern不能run-time換策略 這樣像話嗎..
04/28 00:27, 20F

04/28 01:28, , 21F
其實我是寫 Java 的.. = =+
04/28 01:28, 21F

04/28 01:52, , 22F
原po應該是學C起頭了 所以才不熟這個ref 看多了就懂了
04/28 01:52, 22F

04/28 12:12, , 23F
原 po 去找本 C++ 的書來看看就會明白那是什麼東西了
04/28 12:12, 23F
文章代碼(AID): #1BrjxYyk (C_and_CPP)