1
我的代碼拉姆達捕捉部件是這樣的:怎樣的一個結構
struct foo {
int first;
int second;
};
void func(foo& A) {
Schedule([=]()
{
DoWork(A.first, A.second)
});
}
是否拉姆達捕獲由價值參考結構或它捕獲。第一和和值。第二?
感謝,
我的代碼拉姆達捕捉部件是這樣的:怎樣的一個結構
struct foo {
int first;
int second;
};
void func(foo& A) {
Schedule([=]()
{
DoWork(A.first, A.second)
});
}
是否拉姆達捕獲由價值參考結構或它捕獲。第一和和值。第二?
感謝,
看看下面的代碼:
#include <iostream>
using namespace std;
class NeedDeepCopy
{
public:
NeedDeepCopy()
{
};
NeedDeepCopy(const NeedDeepCopy& other)
{
data = new int[1];
data[0] = 0x90;
}
int *data;
};
void func(NeedDeepCopy& obj) {
auto lambda = [=]() mutable
{
if(*obj.data == 0x90)
cout << "0x90 - a copy was made";
};
if(*obj.data == 0x88)
cout << "Original value is 0x88" << endl;
lambda();
}
int main() {
NeedDeepCopy obj;
obj.data = new int[1];
*obj.data = 0x88;
func(obj);
// your code goes here
return 0;
}
答案是:將整個對象/結構複製到。如果您正在處理需要深度複製的對象,請注意否則可能會得到未初始化的數據。
按價值計算,如果要通過裁判捕捉到它是[&]
如果你想通過值和b裁判捕捉你把[A,& B]
=按值捕獲體內提及的所有自動變量。 http://en.cppreference.com/w/cpp/language/lambda – olevegard
@olevegard:不只是身體。一切都在範圍內。 –
@KerrekSB是的,你是對的。我誤解了cppreference文章。 =只要在lambda中提到它,就按值傳遞可達範圍內的所有內容? – olevegard