作者dreamboat66 (小嫩)
看板C_and_CPP
標題Re: [問題] lambda capture list 的問題
時間Sun Oct 30 11:05:39 2016
謝謝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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1477796742.A.2AD.html
1F:推 LPH66: 1. 這個是我回文裡那個連結提到的, 我不確定標準是不是這樣 10/30 12:11
2F:→ LPH66: 2. [f4=f3] 或 [f4(f3)] 這種帶初始化的 capture 10/30 12:12
3F:→ LPH66: 會如上所言當做有個 auto 在那裡, 那這就跟一般變數宣告 10/30 12:12
4F:→ LPH66: 和初始化一樣; 同樣的 class 你也無法使用這種方式 10/30 12:13
5F:→ LPH66: 喔, 仔細看了一下, f4(f3) 理論上要給過, 這我要看看.. 10/30 12:17
6F:推 LPH66: 嗯, 我想了一下應該是不行, 這裡理論上還是隱式複製 10/30 12:29
7F:→ LPH66: 因為你藉由宣告 lambda 把一個外面的物件給隱式複製到 10/30 12:30
8F:→ LPH66: lambda class 裡面去了, 這個複製是隱式的 10/30 12:30
9F:→ LPH66: 所以會被 explicit 擋掉; 話說回來, 現在好像也沒有 10/30 12:31
10F:→ LPH66: explicit copy ctor 的用途了所以... 10/30 12:31
11F:→ LPH66: 1. 回頭看了連結, 這是標準規定無誤; 裡面有引用了標準原文 10/30 12:32
12F:→ dreamboat66: [f4(f3)]我發現VC是給過的... 為什麼你會說是隱式複 10/30 15:21
13F:→ dreamboat66: 制呢? 他不是類似cstr(): f4(f3) {} 這樣嗎? 10/30 15:21
14F:→ dreamboat66: 你意思是cstr(Foo f3這邊是copy):f4(f3)這邊又一次? 10/30 15:25
15F:→ dreamboat66: 如果是capture by value 實際上不是只有copy一次嗎? 10/30 15:25
16F:→ dreamboat66: 為什麼建構子會想用value去接@@ 10/30 15:26
17F:→ dreamboat66: 順便問一下explict copy cstr以前用途是什麼?淘汰了? 10/30 15:32
18F:→ dreamboat66: 感覺是禁止當參數傳遞 進出function? 10/30 15:36
19F:推 LPH66: 這裡其實我並不大確定到底是怎麼回事 10/30 16:47
20F:→ LPH66: cppreference 只有說這裡等同於一個 auto 卡在它前面 10/30 16:47
21F:→ LPH66: 但實際上是怎樣似乎還是得去研究一下標準才有可能理清 10/30 16:48
22F:→ dreamboat66: 謝謝 問一下你們會提到的標準 是要用錢買嗎? 我只會 10/30 17:16
23F:→ dreamboat66: google看cppreference 10/30 17:16
24F:→ CoNsTaR: 有 draft 可以看 10/30 17:37
25F:→ Caesar08: google "iso c++" 然後就可以看到左邊有working draft 10/30 20:12
26F:推 wtchen: 有working draft的連結 10/30 20:17