使用默认捕获模式是否有任何开销?
{
Foo foo = ...;
Bar bar = ...;
[&]()
{
write(foo);
}
}
{
Foo foo = ...;
Bar bar = ...;
[&foo]()
{
write(foo);
}
}
澄清是否有任何成本使用前者与棒相关即使没有使用?
答案 0 :(得分:3)
未指定lambda如何处理通过引用捕获的实体,来自草案C ++ 14标准(N4140
)部分5.1.2
[expr.prim.lambda]:
如果实体是隐式或显式的,则通过引用捕获实体 已捕获但未通过副本捕获。没有具体说明 在闭包中声明了其他未命名的非静态数据成员 通过引用捕获的实体的类型。匿名成员 工会不得通过参考
获取
此措辞故意保持开放以允许实施围绕此进行优化,请参阅defect report 750: Implementation constraints on reference-only closure objects 哪些引用N2927,其中包含:{/ p>
新措辞不再指定任何重写或关闭成员 "参考"捕获。捕获的实体的使用"通过引用" 影响原始实体,并实现这一点的机制 完全离开了实施。
答案 1 :(得分:2)
N3337 5.1.2 / 15或N4527(C ++ 14最终草案)5.1.2 / 16
如果实体是隐式或显式的,则通过引用捕获实体 已捕获但未通过副本捕获。 是否未指明 在闭包中声明了其他未命名的非静态数据成员 通过引用捕获的实体的类型。