【发布时间】:2013-11-09 16:27:00
【问题描述】:
如果在 lambda 中按值捕获引用类型的变量,是复制引用的对象还是通过引用捕获?
有问题的小样本:
#include <iostream>
struct Test {
int a;
};
void testFunc(const Test &test) {
auto a = [=] {
// is 'test' passed to closure object as a copy
// or as a reference?
return test.a;
} ();
std::cout << a;
}
int main() {
Test test{1};
testFunc(test);
}
【问题讨论】:
-
那么,测试一下怎么样? (您需要为此修改对象,这可以通过尝试使用非常量引用或通过创建变量
mutable来实现。) -
似乎是value。
-
@JanHudec 是的,测试很好,但是查看相关标准的部分和基于理论的答案总是有用的(有很多这样的专家)。
-
知道引用不是对象有帮助吗? Lambda 总是捕获对象,它们可以通过值或引用来实现。