精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《Arim (Arim5566)》之銘言: : 爬了許多文,還是不懂copy constructor為什麼一定要用call by reference : 否則會產生無窮迴圈? : 可以請版友不吝指教一下嗎 謝謝 假設有一 function foo 長成這樣: foo(Bar bar); bar 是 pass-by-value 的. 當有人要 invoke foo() Bar myBar foo(myBar); 進入 foo 之前, 因為是 pass by value, 所以要生成一個 myBar 的 copy. 要怎樣生成呢? compiler 會利用 copy ctor 生成一個 myBar 的複製品, 然後供 foo() 裡面使用. 這裡明白還明白嗎? 把故事放回你的問題: 要是 copy ctor 是 pass-by-value 的話, 比如 Bar myBar; Bar barCopy(myBar); 生成 barCopy 的時候, 因為 myBar 是 pass by value, 所以 compiler 要生成一個 myBar 的複製品 (假設叫 tmpBarA) 才傳進去生成 barCopy. 但生成 tmpBarA, 也是利用 copy ctor, 即是 compiler 是在做 Bar tmpBarA(myBar); 由於是 pass-by-val, 那麼要生成 tmpBarA, 其實傳進去的是 myBar 的一個 複製品 (tmpBarB). 要生成 tmpBarB....... 這樣明白了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82
QQ29:請問意思是invoke function就先copy一份 不是因為進去 10/22 21:14
QQ29:foo(Bar bar<=這邊assign嘛?); 10/22 21:16
QQ29:應該說initial@@ 10/22 21:16
QQ29:另外是VC compile就會報錯 說不能寫成傳copy~ 這是VC獨有嘛? 10/22 21:34
VictorTom:推解釋:) 10/22 22:12