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
。那么,obj
以内lambda
本身是不是一个参考?为什么?
有人可以解释我吗?谢谢。
引用是一个别名,所以它只是另一个左值。在几乎所有情况下,它的行为与它所引用的变量没有区别。制作原件或别名的副本,其副本仍然是其副本。 – sp2danny