Re: [問題] lambda capture list 的問題

看板C_and_CPP作者 (小嫩)時間9年前 (2016/10/30 11:05), 編輯推噓4(4022)
留言26則, 5人參與, 最新討論串3/4 (看更多)
謝謝L大解惑 但我還是有觀念不太明白 explicit是我故意寫上去想確認觀念 1. 光寫 [f2] 這樣 , "f2 繼承自它抓取的變數的常數性" 這是規則嚕? 所以他並不是[f2=f2] 也不是[f2(f2)] 而是compiler內部自己會想辦法複製 (會說想辦法是因為我自己無法複製, 問題二)? 2. http://ideone.com/JzEnVF 因為我刻意寫explicit, 我預期他[f4=f3] 會不給過 [f4(f3)] 會給過 但結論他的error code都一樣 為什麼他規則會是這樣? 那不就變成我根本無法capture by value 一個copy cstr 寫explicit的物件嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.202.250 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1477796742.A.2AD.html

10/30 12:11, , 1F
1. 這個是我回文裡那個連結提到的, 我不確定標準是不是這樣
10/30 12:11, 1F

10/30 12:12, , 2F
2. [f4=f3] 或 [f4(f3)] 這種帶初始化的 capture
10/30 12:12, 2F

10/30 12:12, , 3F
會如上所言當做有個 auto 在那裡, 那這就跟一般變數宣告
10/30 12:12, 3F

10/30 12:13, , 4F
和初始化一樣; 同樣的 class 你也無法使用這種方式
10/30 12:13, 4F

10/30 12:17, , 5F
喔, 仔細看了一下, f4(f3) 理論上要給過, 這我要看看..
10/30 12:17, 5F

10/30 12:29, , 6F
嗯, 我想了一下應該是不行, 這裡理論上還是隱式複製
10/30 12:29, 6F

10/30 12:30, , 7F
因為你藉由宣告 lambda 把一個外面的物件給隱式複製到
10/30 12:30, 7F

10/30 12:30, , 8F
lambda class 裡面去了, 這個複製是隱式的
10/30 12:30, 8F

10/30 12:31, , 9F
所以會被 explicit 擋掉; 話說回來, 現在好像也沒有
10/30 12:31, 9F

10/30 12:31, , 10F
explicit copy ctor 的用途了所以...
10/30 12:31, 10F

10/30 12:32, , 11F
1. 回頭看了連結, 這是標準規定無誤; 裡面有引用了標準原文
10/30 12:32, 11F

10/30 15:21, , 12F
[f4(f3)]我發現VC是給過的... 為什麼你會說是隱式複
10/30 15:21, 12F

10/30 15:21, , 13F
制呢? 他不是類似cstr(): f4(f3) {} 這樣嗎?
10/30 15:21, 13F

10/30 15:25, , 14F
你意思是cstr(Foo f3這邊是copy):f4(f3)這邊又一次?
10/30 15:25, 14F

10/30 15:25, , 15F
如果是capture by value 實際上不是只有copy一次嗎?
10/30 15:25, 15F

10/30 15:26, , 16F
為什麼建構子會想用value去接@@
10/30 15:26, 16F

10/30 15:32, , 17F
順便問一下explict copy cstr以前用途是什麼?淘汰了?
10/30 15:32, 17F

10/30 15:36, , 18F
感覺是禁止當參數傳遞 進出function?
10/30 15:36, 18F

10/30 16:47, , 19F
這裡其實我並不大確定到底是怎麼回事
10/30 16:47, 19F

10/30 16:47, , 20F
cppreference 只有說這裡等同於一個 auto 卡在它前面
10/30 16:47, 20F

10/30 16:48, , 21F
但實際上是怎樣似乎還是得去研究一下標準才有可能理清
10/30 16:48, 21F

10/30 17:16, , 22F
謝謝 問一下你們會提到的標準 是要用錢買嗎? 我只會
10/30 17:16, 22F

10/30 17:16, , 23F
google看cppreference
10/30 17:16, 23F

10/30 17:37, , 24F
有 draft 可以看
10/30 17:37, 24F

10/30 20:12, , 25F
google "iso c++" 然後就可以看到左邊有working draft
10/30 20:12, 25F

10/30 20:17, , 26F
精華區有working draft的連結
10/30 20:17, 26F
文章代碼(AID): #1O5ME6Aj (C_and_CPP)
文章代碼(AID): #1O5ME6Aj (C_and_CPP)