[英]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.