Aru*_*run 2 c++ vector compiler-warnings unique-ptr c++11
在以下代码段中:
std::vector<std::unique_ptr<int>> vec;
vec.emplace_back(std::make_unique<int>(1));
vec.emplace_back(std::make_unique<int>(2));
vec.emplace_back(std::make_unique<int>(3));
vec.emplace_back(std::make_unique<int>(4));
vec.emplace_back(std::make_unique<int>(5));
auto & itr = std::find_if(vec.begin(), vec.end(), [](std::unique_ptr<int> & val)->bool
{
return *val == 5;
});
vec.erase(itr);
Run Code Online (Sandbox Code Playgroud)
我收到以下警告:
Severity Code Description Project File Line
Warning C4239 nonstandard extension used: 'initializing': conversion from 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::unique_ptr<int,std::default_delete<_Ty>>>>>' to 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::unique_ptr<int,std::default_delete<_Ty>>>>> &'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我在VS2015上,这个警告只在警告级别4出现.我应该忽略它还是会导致任何偷偷摸摸的问题(如果unique_ptr在更大的上下文中使用了涉及s 矢量的类似代码)?
find_if按值将迭代器返回到匹配元素,并且您尝试将其绑定到非const引用,这是非法的.VC++编译器有一个臭名昭着的扩展允许这个,但谢天谢地在你设置时生成一个警告/W4.将您的代码更改为
auto itr = std::find_if(...);
Run Code Online (Sandbox Code Playgroud)