C_and_CPP 板


LINE

https://github.com/boostorg/filesystem/commit/701ae4054947b1643eb6cd42f7e172f8 3536b764 因緣際會看到這個patch 他這樣寫 刻意用 std move 擺在return 但書本上或是網路上查到的都是說 不要這樣寫 會限制最佳化的發揮空間 但他是boost ,我就想說是不是有什麼特殊考量 相較他 const lhs 版本 ,return local變數 就沒特別寫 move 難道參數型態是 &&,return若沒move就會走copy(我想沒這個限制才對) 所以想知道 到底什麼時候要刻意加上move在return value上 另外對於他特別寫inline 1. 他實作是寫在class內,應該不用特別寫inline...有什麼背後原因嗎? 2. inline 跟 rvo感覺就有點互斥,為什麼他要特別寫inline呢? 看了很不解,懷疑自己有少理解一些觀念 謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.8.46 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1564585460.A.073.html
1F:→ lovejomi: https://ideone.com/gjjVLk 針對我的疑惑 做實驗 08/01 00:41
2F:→ lovejomi: 但我無法解釋為什麼 不return move就會變成走copy 08/01 00:41
3F:→ lovejomi: 一直認為return 是一個獨特的存在 感覺有不知道的規則. 08/01 00:46
4F:推 KaryuuIssen: 就算是右值參照綁定也是左值 所以要用move轉回右值 08/01 01:33
5F:→ KaryuuIssen: 才能實現移動語義 不知道你的問題是不是這個 08/01 01:33
6F:→ loveme00835: zzz 希望你能有系統地學一個語言, 不是網路上東拼西 08/01 01:52
7F:→ loveme00835: 湊, 然後回答了你也吸收不了 08/01 01:52
8F:→ lovejomi: @Kar:我的問題不是這個,是一般return xxx; by value就 08/01 09:54
9F:→ lovejomi: 會走move不需要刻意去std move轉型, 但為什麼這種&&的要 08/01 09:54
10F:→ lovejomi: 特別用move才會變成走move呢(我知道他有名字是左值)? 08/01 09:54
11F:→ lovejomi: 想了解細節 謝謝 08/01 09:54
12F:推 eye5002003: 從boost的使用規畫去想就可以理解它在做什麼了,通常 08/01 10:36
13F:→ eye5002003: 像c=a/b這種算式是不會去修改a跟b的數據,它們只參與而 08/01 10:38
14F:→ eye5002003: 以,然而當你這麼寫的時候c=std::move(a)/b就是允許編 08/01 10:40
15F:→ eye5002003: 譯器拿a的資源來用了,return那邊不寫move的話會建立一 08/01 10:44
16F:→ eye5002003: 個新的副本,這樣使用者寫的move就失去意義了 08/01 10:46
17F:→ lovejomi: 我好像意識到 平常不寫move是因為受惠於nrvo...但這樣 08/01 10:51
18F:→ lovejomi: 讓我不解 想要nrvo又inline 是怕說inline失敗還有nrvo 08/01 10:51
19F:→ lovejomi: 嗎 08/01 10:51
20F:推 KaryuuIssen: 上上面問題 因為&& lhs是外來的輸入引數 無法NRVO 08/01 15:13
21F:→ KaryuuIssen: 當然能inline最好 NRVO所搞的優化 inline何嘗不可 08/01 15:14
22F:→ hunandy14: 我有注意到你更改後的把 path&& 改為 path 了 08/01 17:35
23F:→ hunandy14: 改回來原本 $$ 你不用 std::move 是不合法的 08/01 17:36
24F:→ hunandy14: 阿 不是你改的~沒注意看 08/01 17:39
25F:→ Lipraxde: inline 不是因為它放在 header 裡嗎 08/01 18:51
26F:→ loveme00835: 會跟 inline 混淆表示你根本不知道你在問什麼, move 08/01 19:54
27F:→ loveme00835: 的作用就是轉型, 這會決定哪個版本的建構子會被叫起 08/01 19:54
28F:→ loveme00835: 來, 而會不會最終會被 optimize 掉, 則是取決你的函 08/01 19:54
29F:→ loveme00835: 式內容, 不是 return statement. 你每篇問題都是看到 08/01 19:54
30F:→ loveme00835: 一個 feature 就問, 但是最簡單的像 move 你就理解錯 08/01 19:54
31F:→ loveme00835: 誤, 其實後面也不用問了 08/01 19:54
32F:→ loveme00835: 直接跟你說 C++17 以前, 談 RVO 都是 implementation 08/01 19:55
33F:→ loveme00835: defined 所以先知道自己問題的 scope 別人才有辦法 08/01 19:55
34F:→ loveme00835: 回答你 08/01 19:55
35F:推 ofd168: 推樓上好心大神 08/08 02:18







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP