2014-01-08 89 views
1

我的代碼拉姆達捕捉部件是這樣的:怎樣的一個結構

struct foo { 
    int first; 
    int second; 
}; 

void func(foo& A) { 
    Schedule([=]() 
    { 
     DoWork(A.first, A.second) 
    });  
} 

是否拉姆達捕獲由價值參考結構或它捕獲。第一和和值。第二?

感謝,

+1

=按值捕獲體內提及的所有自動變量。 http://en.cppreference.com/w/cpp/language/lambda – olevegard

+0

@olevegard:不只是身體。一切都在範圍內。 –

+0

@KerrekSB是的,你是對的。我誤解了cppreference文章。 =只要在lambda中提到它,就按值傳遞可達範圍內的所有內容? – olevegard

回答

1

看看下面的代碼:

#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; 
} 

http://ideone.com/Ws6KJX

答案是:將整個對象/結構複製到。如果您正在處理需要深度複製的對象,請注意否則可能會得到未初始化的數據。

1

按價值計算,如果要通過裁判捕捉到它是[&]

如果你想通過值和b裁判捕捉你把[A,& B]