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