看板 C_and_CPP 關於我們 聯絡資訊
請問 我以前學到的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
james732:你可以當作 v1 與 a 是同一個東西 v2 與 b 是同一個東西 04/27 20:57
m13m13m:親愛的compiler到底是怎麼運作的阿....煩... 04/27 21:00
james732:其實 user 不用管 compiler 怎麼做 04/27 21:02
james732:(我以前一直很想知道 後來倒是不管它了 XDDD) 04/27 21:02
m13m13m:請問J大 那這樣的功能 可以把指標的地位取代掉嗎?... 04/27 21:07
james732:我也在想C++有沒有可能完全不用pointer...XDD 04/27 21:08
james732:不過有點難 畢竟reference一定要初始化又不能改變 04/27 21:09
tinlans:其實就是用 pointer 同原理實作,只是 syntax sugar。 04/27 21:20
tinlans:strategy pattern 就不可能只用 C++ reference 實作了。 04/27 21:21
tinlans:乖乖用 pointer 吧,我反而很少寫 reference。 04/27 21:21
tinlans:因為很容易出現 a->foo().bar() 這種 code。 04/27 21:22
tinlans:要就 -> 一路到底。 04/27 21:22
tinlans:上上行的例子其實是 a.foo()->bar() 比較常見。 04/27 21:22
tomap41017:推樓上精闢 04/27 22:09
yoco315:問? 為什麼 strategy pattern 不能只用 ref 實作 @@? 04/27 22:21
holymars:欸..就算你要用CRTP做 this指標還是指標啊 04/27 23:06
holymars:而且CRTP沒辦法做到動態多型吧 04/27 23:06
yoco315:不要理我,我傻了 XDDDDDDD 04/27 23:22
firose:CRTP 就是要避免虛擬呼叫阿 幹麻去想要達到動態多型 04/27 23:55
holymars:strategy pattern不能run-time換策略 這樣像話嗎.. 04/28 00:27
yoco315:其實我是寫 Java 的.. = =+ 04/28 01:28
justdemon:原po應該是學C起頭了 所以才不熟這個ref 看多了就懂了 04/28 01:52
adrianshum:原 po 去找本 C++ 的書來看看就會明白那是什麼東西了 04/28 12:12