对于foo
声明为Foo& foo = ...;
,lambdas 的按值捕获和按引用捕获语义之间有什么区别吗?
问问题
265 次
2 回答
16
我认为你已经陷入了一个常见的误解......引用是真实对象的别名。初始化之后,对引用的任何使用都完全等同于对原始对象的使用。如果你考虑到这一点,这个问题就没有什么意义了。如果引用是对象,那么无论是对象还是对对象的引用,其行为都[foo](){}
将完全相同。foo
于 2012-08-31T14:13:29.927 回答
12
是,有一点不同。
§5.1.2 [expr.prim.lambda] p14
如果实体被隐式捕获并且默认捕获是
=
,或者如果使用不包含&
. 对于复制捕获的每个实体,在闭包类型中声明了一个未命名的非静态数据成员。这些成员的声明顺序是未指定的。如果实体不是对对象的引用,则此类数据成员的类型是相应捕获实体的类型,否则为引用类型。
因此,如果您捕获按值命名引用的标识符,您将获得被引用对象的副本。
于 2012-08-31T14:00:32.100 回答