tow*_*owi 14 c++ lambda copy-constructor c++11
是否允许编译器删除按值捕获所需的副本?
vector<Image> movie1;
apply( [=movie1](){ return movie1.size(); } );
Run Code Online (Sandbox Code Playgroud)
movie1?
apply实际上并没有改变 movie1?const仿函数吗?vector有一个移动构造函数和移动分配?
Image,以防止昂贵的副本?void operate(vector<Image> movie)我很相信它不能.
即使外部函数不再显式使用变量,移动变量也会改变破坏的语义.
移动构造函数Image没有帮助,vector可以move或swap不移动其元素.
如果变量从这一点开始是只读的,为什么不通过引用捕获?你甚至可以创建一个const引用并捕获它.
如果变量不是只读的,则需要复制.无论外部函数还是lambda执行修改都无关紧要,编译器不能允许该修改对另一个进行修改.
我在by-value capture和by-value参数传递之间看到的唯一区别是捕获被命名,它不能是临时的.因此,不能使用适用于临时值的参数传递优化.
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |