有这样的c ++代码:
auto func = [=, vec1=std::move(vec)]() {
printf("%x %x %x\n", p,vec1.data(), vec.data());
};
Run Code Online (Sandbox Code Playgroud)
当我编译它时-std=c++11,编译器打印warning
lambda capture initializers only available with -std=c++14 or -std=gnu++14,
但代码可以正常运行,所以我需要处理它warnning.
所以我需要处理这个警告.
您应该修复代码,以便没有警告.
有两个选项:在C++ 14模式或更高版本的标准版本中编译,其中允许使用vec1=std::move(vec)lambda 捕获初始化程序,或者不使用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)
);
Run Code Online (Sandbox Code Playgroud)
PS %x格式说明符要求参数为unsigned int但返回类型std::vector<T>::data不是unsigned int,但是T*,因此行为将是未定义的.%p是指针.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |