[英]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 int
但std::vector<T>::data
的返回類型不是unsigned int
,而是T*
,因此行為將是不確定的。 %p
用於指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.