看板 EE_DSnP 關於我們 聯絡資訊
(以下僅表達概念) 在Matrix的+ operator 的funtion 中 (+operator function){ Matrix add(x,y) // 新建一個add之後回傳用,x、y是大小根據傳入要加的matrix決定 for迴圈{ 使得add = (傳入的matrix)+(this matrix) } if(判斷條件match) 回傳add else 回傳(*this) } 這樣做會出問題,檢查很久發現,問題癥結點竟發生在多回傳了*this ?? 也不一定是return *this才出問題,return 0 也一樣 只要我用判斷式去決定要回傳兩樣不同東西中的哪樣 if(X) return a else return b 即使條件X沒觸發,他還是會造成不同(莫名的多建構和解構了一些物件) 會和單純的return b做不一樣的事情 所以,我嘗試改成以下測試看看 if(判斷條件match) 回傳add else cout<<"not match" 回傳就正確了(我想要的add真的傳回去了) 表示應該不是我在回傳add時沒有設定好(吧) --- 而後我發現 我只要在那個operator的建構function任何地方加上三行 if(條件){ return ... } 即使條件無觸發,感覺上這三行就只是無用的garbage 但還是會造成最後return add時只return一堆亂碼 --- 最後我改成 if(match){ add = this + m } else{ add = this } return add 就成功了 確實照我想要的,判斷match就回傳有加過的,不match就回傳原來的 但這樣寫實在有點囉嗦... 因為那兩個判斷式內容我都弄的有點長 --- 可以問一下這個問題的癥結點在哪嗎 我用ddd trace他的過程到頭很暈orz,還是沒有看出來 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.220.200 ※ 編輯: BBSealion 來自: 218.168.220.200 (10/19 19:19)
yangjiunru:檢查一下"Copy constructor"和"operator ="? 10/19 22:47