Re: [問題] 兩個 C++ 指標 的問題
※ 引述《softwind (softwind rising)》之銘言:
: 說到這邊 小弟也想請問一下
: 下面這些名詞的說法或解釋:
: 1. call by value
: 2. call by pointer
: 3. call by reference
: 4. call by name
: 上面這四項 有版上高手可以詳細說明嗎?
: 請說明一下用法 和C++內部的運作方式/實現方式
: 最好能有 書本或是雜誌或是官方標準的參考
: 因為小弟被這幾個相似的名詞
: 搞的要解說的時候 都不太確定要用哪一個為準
: 謝謝
: ----------------------------------------------
: 我不會只有問 不會回PO
: 小弟想先聽聽看 其他人的說法
: 所以 晚點我再回PO 我的看法 THX...
最近因為某件事在唸計概 有查了一下這些東西
(基本上是看http://en.wikipedia.org/wiki/Evaluation_strategy這裡的)
1. call by value
就是簡單的把值丟過去
所以在函式裡胡搞亂搞都不會影響外面給值傳的變數
2. call by adderss (pointer?!)
在我的觀念裡這只是丟個指標過去的call by value
但通常會用來當作下一項call by reference的替代品(當不支援下一項時 例如C)
成為下一項的替代品時要多一層指標存取
3. call by reference
就是傳過去的是它的reference
等於那個變數在函式裡有個別名這樣
因此在裡面亂搞會影響外面傳值的變數
和上一個不同的是 這個不用多一層指標存取
如果參數是運算式的話 (嚴格說應該是非左值)
則會建立一個暫時物件 然後傳這個暫時物件的reference
函式結束後就把那暫時物件丟掉
然後聽過一種說法是 內部其實是用傳位址來實作的
4. call by name
(這是我看資料後才知道是什麼..)
完全不處理參數
在函式中直接把所傳的參數原封不動代入
(也就是如果傳入x+y 就會把x+y這式子代入)
(有點類似macro代入)
例如函式是f(x,y) 中間要算x=y
那如果傳入a,a+1 算的那一行就會變成a=a+1
所以用它幾次就會算幾次 沒用過就完全不會去動它
不過如果傳入的式子不是左值卻被放在等號左邊會怎樣就不知道了
C/C++好像沒有這種呼叫法
--
有人喜歡邊玩遊戲邊上逼;
也有人喜歡邊聽歌邊打字。
但是,我有個請求,
選字的時候請專心好嗎?
-- 改編自「古 火田 任三郎」之開場白
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.44.21
推
07/28 20:07, , 1F
07/28 20:07, 1F
推
07/29 02:06, , 2F
07/29 02:06, 2F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章