推 LPH66:我寫起來的感覺是只有跟那個參數無關的程式碼能共用 10/14 20:13
→ LPH66:但之所以會用這種寫法大多都是為了省下那個參數的複製 10/14 20:14
→ LPH66:也就是說通常這兩者很難能共用 10/14 20:14
→ LPH66:至於後者 如果你對 this 只取不存那就寫 const 版就好 10/14 20:15
→ LPH66:就像一個參數你只取不存的話直接掛 const 上去是一樣的道理 10/14 20:16
→ applecool:所以答案是全都沒有?? 10/14 20:20
推 LPH66:我的答案比較偏向沒什麼必要...特別是後者我想不到 use case 10/14 20:27
→ applecool:是阿~~極其罕見,也只有我這種倒楣鬼會遇到 10/14 20:37
→ Feis:後者可能發生的情況是回傳一個指涉物件內部成員的參考 10/14 20:48
→ Feis:例如實作一個陣列類別時, operator[] 會有 const 跟非 const 10/14 20:48
→ Feis:實作內容相同但是因為回傳值的型態不同需要兩個函式 10/14 20:49
→ Feis:我所知的作法是寫 const 版本, 然後在非 const 版本呼叫const 10/14 20:50
→ Feis:版本. 呼叫時會用到 const_cast<> 10/14 20:50
→ Feis:至於前者我不確定你的用法~ 可能給個例子比較好說? 10/14 21:03
→ Feis:解法應該不脫強制轉型或模版 10/14 21:09
謝謝,不過不能用轉型阿,至於怎麼用 template 完成這需求
我暫時沒想出來
至於前者我臨時給一個例子好了
假設我要把很多變數轉字串
l-value 版本的大概程式碼或許長這樣
template<typename T>
string toStr(const T &x) {
stringstream buf;
buf << x;
return buf.str();
}
template<typename T, typename... Args>
string toStr(const T &x, Args... y) {
string tmp( toStr(x) );
return (tmp += toStr(y...));
}
但 r-vlaue 的時候似乎只能再複製一次了(move 會影響效能嗎)
P.S. code 只是例子,可能有 bug,請不要 compile
話說轉字串有沒有什麼簡單又高效的方法呢?
感恩!!!
推 Ebergies:其實我會在真的遇到問題的時候特製這個地方來處理... 10/14 23:00
推 LPH66:move 就是解決複製暫時物件後又把原來的暫時物件摧毁 10/14 23:01
→ LPH66:這種看起來沒什麼意義但原本不得不做的複製問題 10/14 23:02
※ 編輯: applecool 來自: 123.110.244.195 (10/14 23:03)
→ LPH66:如果不能 move 的話我覺得就沒有必要寫 rvalue ref 的參數了 10/14 23:03
→ applecool:嗯嗯我意思是說,不能寫一個版本,另一個用 move 10/14 23:04