簡體   English   中英

你能在lambda中捕獲數組嗎?

[英]Can you capture arrays in a lambda?

我處於多線程環境中,我有一個從套接字接收數據的線程,我想將該數據發送到消息隊列中。

例如,像這樣:

char buf[N];
size_t len = ::recv(buf, ...);
queue.send([buf,len] {
    //stuff
});

但是這不起作用,因為buf可能超出范圍,或被下一個::recv()覆蓋。 現在,我可以把它復制到一個string / std::vector /不管和價值傳遞的事情:

char buf[N];
size_t len = ::recv(buf, ...);
std::string my_data(buf, len);
queue.send([my_data](){ /* stuff */ });

但是我要發一份額外的副本吧? 有沒有辦法在沒有額外開銷的情況下獲得相同的功能?

是的你可以。 標准說(5.1.2p21):

在計算lambda表達式時,復制捕獲的實體用於直接初始化生成的閉包對象的每個對應的非靜態數據成員。 (對於數組成員,數組元素按增加的下標順序進行直接初始化。)

這表明lambda可以通過復制捕獲數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM