vector<unique_ptr<char[]>> vecStr; vecStr.emplace_back(new char[10]()); //合法 vecStr.insert(vecStr.begin(), new char[10]()); //合法
1.书上说inset操作是按值拷贝,那么理论上是不会主动去构造元素,那么上述inser语句应该是错误的,为什么能正确执行
2.若inser操作也会构造元素,那么emplace操作和inser操作有什么区别
以上2个问题,望解答
解决方案
5
lz用的什么编译器,居然第二个合法?
[code]prog.cpp: In function “int main()”:
prog.cpp:8:49: error: no matching function for call to “std::vector<std::unique_ptr<char []> >::insert(std::vector<std::unique_ptr<char []> >::iterator, char*)”
vecStr.insert(vecStr.begin(), new char[10]());[/code]
std::vector::insert
可以看出没有一个可以匹配
[code]prog.cpp: In function “int main()”:
prog.cpp:8:49: error: no matching function for call to “std::vector<std::unique_ptr<char []> >::insert(std::vector<std::unique_ptr<char []> >::iterator, char*)”
vecStr.insert(vecStr.begin(), new char[10]());[/code]
std::vector::insert
可以看出没有一个可以匹配
5
vecStr.insert(vecStr.begin(), new char[10]());
本人运行这句是会报错的。得改为:
vecStr.insert(vecStr.begin(),unique_ptr<char[]>(new char[10]));
5
就算vs2015也不是完全支持c++11标准, 2010本人记得当初实现的c++11最基本的一批标准(像是nullptr这些简单的),
要用c++11就扔了吧,要用新标准就一直用最新的版本
要用c++11就扔了吧,要用新标准就一直用最新的版本
10
这取决于你的unique_ptr构造函数定义,假如有explicit关键词,则不能实现这个转换,也就是说会无法通过编译