作者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/cn.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