【发布时间】:2016-02-18 17:32:14
【问题描述】:
考虑一下:
class TestLambda {
public:
std::vector<char> data;
};
void test_lambda(TestLambda& obj) {
[=]() mutable {
obj.data.push_back(0x01);
}();
}
int main() {
TestLambda tst;
tst.data.push_back(0x99);
test_lambda(tst);
// tst.data is unchanged at this point
return 0;
}
在致电test_lambda 之后,我期望看到tst.data 的变化,但事实并非如此。要查看更改,我必须创建 lambda,再次传递 obj 的引用,即。 [&obj]().
为什么我们需要这个?我的意思是,又是一个参考?
obj 已经是一个参考。然后,lambda 通过复制捕获obj。那么,lambda 中的obj 本身不是引用吗?为什么?
有人可以解释一下吗?谢谢。
【问题讨论】:
-
引用是一个别名,所以它只是另一个左值。在几乎所有情况下,它的行为都与它所引用的变量没有什么不同。复制原件或别名的副本,它仍然是副本。
标签: c++ c++11 lambda pass-by-reference