看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) C++ 問題(Question): 在讀開放課程的資料結構的Stack章節時有些問題想釐清, 請各位大大指導 :) void Stack<KeyType>::Add(const KeyType &x) { if(IsFull()) stack_full(); else stack[++top]=x; } 這是在做Stack push時的member function, 這裡傳入的參數為某個變數的reference 這邊傳入參數用pass by value或者pass by reference, 我想應該對這個stack出來 結果都是一樣的. 我的疑問是 使用reference或pointer的好處是當我們想要改到傳進參數的本體的時候, 可以直接把自己傳進去, 但是當像這stack push的例子, 有沒有改到傳進來的參數 根本沒有影響的情況下, 是否傳入參數使用pass by value或reference都沒關係? 還是說用reference有甚麼好處呢? (少copy這個動作?!) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.130.65 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1507729017.A.62D.html
jerryh001: 你答對了 10/11 22:18
jerryh001: 另一種情況是某些不能複製的物件 就只能傳參考 10/11 22:19
dwight90488: 謝謝Jerryh001大大 想請問答對是指少copy這個動作嗎 10/11 22:31
dwight90488: 所以盡量在call function的傳入都使用pass by 10/11 22:32
dwight90488: reference嗎? 即便只是傳到function做加法? 10/11 22:33
jerryh001: 我是習慣都加& 不過如果只是小程式沒差很多就隨意 10/11 23:04
dwight90488: 謝謝您 傑瑞h001大大!!!!! 10/11 23:07
jimfan: 好奇一問:stack[++top]=x; 有否將 x 複製呢? 10/13 00:07
oToToT: 有吧,=operator通常會複製吧 10/13 14:49
dwight90488: 我覺得assignment 不會複製到x吧 10/13 21:09
jerryh001: 會複製 你之後把x改掉 stack裡面是不會動到的 10/13 21:51
Lipraxde: j大前面說某些物件不能複製,這樣有衝突嗎? 10/13 22:03
kingofsdtw: 找找operator ? 10/13 22:56
kingofsdtw: "const" KeyType "&x" ,&x單純個人喜好 10/13 23:00
jerryh001: 會 這時候stack的型態可以改成 那種物件的指標來避免 10/14 08:36