Re: [問題] 什麼時後 不該用/該用reference當member

看板C_and_CPP作者 (沒人在乎)時間6年前 (2018/07/23 20:07), 6年前編輯推噓9(9013)
留言22則, 10人參與, 5年前最新討論串2/4 (看更多)
※ 引述《lovejomi (JOMI)》之銘言: : Foo(ICallback* callback) : : mCallback(callback){ assert(mCallback); } : 被問說那為什麼你mCallback不用reference 然後Foo就開成(ICallback&)就好 : 我不想這樣改 : 但我沒有強力的說法比較出哪一種比較好或是合理 : 我的看法 : 用ref, caller勢必要*ptr 做dereference才能傳進來 : 雖然說reference 可以當作non null去操作 : 但有心要傳*null也不是不行. : 開reference 給別人傳,比起pointer更有機會caller不小心傳入local variable : 以上都可以用一句話“哪有人會這樣寫”來否定用pointer存. : 而用reference 可以給人一種 必定要想辦法生出一個物件才能呼叫的感覺... : 實在想不到哪個時候 用reference : 才是合理的寫法. : 反而我自己是很少看過member 用reference去存... : 不知道大家在design上會有什麼考量 : 謝謝 我整理一下你的文章 覺得應該將m_callback宣告為reference的理由 ‧ 用reference可以讓使用者明白一定要有物件作引數才可以 覺得應該將mp_callback宣告為pointer的理由 ‧ 我不想寫成reference 老實講我覺得這種問題 沒什麼必要來搬救兵 有些團隊文化就是要聽大老的 有些團隊以和為貴 有些團隊奔放自由 有些團隊會造神 這種問題 只是看你在哪種團隊 然後做的東西給誰用而已 如果你的程式碼是編譯完變軟體 給一般用戶用 我覺得真的沒差 如果你的程式碼是給別人用的 那個assert其實意義也不大 很多assert根本就是寫爽的 只是會跳視窗的TODO而已 所以在參數設計上刁難user 確實是有效果 但是認真討論下去 真的沒啥意義 就只是習慣問題而已 等等跳出第三個人來說:為什麼不用std::function就好 那不是沒完沒了? 對呀 為什麼你不用std::function就好? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.50.60.32 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532347671.A.CBE.html ※ 編輯: nobodycares (123.50.60.32), 07/23/2018 20:13:45

07/23 21:17, 6年前 , 1F
...
07/23 21:17, 1F

07/23 22:13, 6年前 , 2F
XDDDD
07/23 22:13, 2F

07/23 23:07, 6年前 , 3F
寫C++的原則:能用STL就用STL
07/23 23:07, 3F

07/23 23:09, 6年前 , 4F
也不一定啦 很多公司都喜歡自己重刻 我一年內看過四
07/23 23:09, 4F

07/23 23:09, 6年前 , 5F
種string
07/23 23:09, 5F

07/24 00:53, 6年前 , 6F
我有自己刻過string,後來又回去用std::string了
07/24 00:53, 6F

07/24 00:57, 6年前 , 7F
因為後來覺得為了擴增功能而去建立新的字串容器很笨
07/24 00:57, 7F

07/24 00:59, 6年前 , 8F
而且其他人應該也不喜歡看到這麼多變種
07/24 00:59, 8F

07/24 09:59, 6年前 , 9F
對呀 為什麼不用std::function就好
07/24 09:59, 9F

07/24 16:07, 6年前 , 10F
因為他覺得方便啊,看不懂是你的問題
07/24 16:07, 10F

07/24 16:08, 6年前 , 11F
開案的第一手RD最大
07/24 16:08, 11F

07/24 16:09, 6年前 , 12F
一堆規則只用到一次..兩次..很常見
07/24 16:09, 12F

07/24 16:11, 6年前 , 13F
code切成黑盒子有時真的不太必要就是了..
07/24 16:11, 13F

07/24 16:11, 6年前 , 14F
反而是菜鳥才幹的
07/24 16:11, 14F

07/24 16:20, 6年前 , 15F
...我是回string
07/24 16:20, 15F

07/27 19:43, 6年前 , 16F
推一下std::function
07/27 19:43, 16F

07/28 14:27, 5年前 , 17F
std::function裡面包的東西要可copy
07/28 14:27, 17F

07/28 14:28, 5年前 , 18F
結果你還是會遇到要包指標還是包reference_wrapper的
07/28 14:28, 18F

07/28 14:28, 5年前 , 19F
問題
07/28 14:28, 19F

07/29 08:56, 5年前 , 20F
其實就是因為std::string太弱才會有那麼多重刻 不過..
07/29 08:56, 20F

07/29 08:56, 5年前 , 21F
老實講配boost::string應該夠滿足絕大多數需求了
07/29 08:56, 21F

07/29 09:54, 5年前 , 22F
在沒滿足的就用外掛函數掛上去就好
07/29 09:54, 22F
文章代碼(AID): #1RLSKNo- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1RLSKNo- (C_and_CPP)