簡體   English   中英

Lambda捕獲初始化器對C ++ 11的警告

[英]lambda capture initializers warning for c++11

有這樣的C ++代碼:

auto func = [=, vec1=std::move(vec)]() {
                   printf("%x  %x  %x\n", p,vec1.data(), vec.data());
           };

當我使用-std=c++11進行編譯時,編譯器將顯示warning

lambda capture initializers only available with -std=c++14 or -std=gnu++14

但是代碼可以正確運行,因此我需要對warnning

所以我需要對此警告進行處理。

您應該修復代碼,以便沒有警告。

有兩個選項:在允許使用lambda捕獲初始化程序的C ++ 14模式或更高標准版本中進行編譯,或者不使用vec1=std::move(vec) lambda初始化程序。

這些代碼需要交叉編譯,因此我需要考慮是否支持c ++ 14平台,這是一個歷史問題,因此無法直接添加c ++ 14

因此,選擇后者。 如果目標平台不支持C ++ 14功能,請不要使用它。

如果需要進入捕獲,可以使用std::bind在C ++ 11中實現它:

auto func = std::bind(
    [=](const decltype(vec)& vec1) {
       printf("%x  %x  %x\n", p,vec1.data(), vec.data());
   },
   std::move(vec)
);

PS %x格式說明符要求參數為unsigned intstd::vector<T>::data的返回類型不是unsigned int ,而是T* ,因此行為將是不確定的。 %p用於指針。

暫無
暫無

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

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