std :: vector不支持右值赋值

rea*_*esk 0 c++ vector c++11

这是我的测试代码:

void Test::test(const std::vector<uint8_t>& buffer) {
    std::vector<uint8_t> data;
    data = std::move(buffer);
}
Run Code Online (Sandbox Code Playgroud)

这段代码似乎毫无意义,这只是一个例子.我在我的ide中使用代码导航来找出=运算符的实现,我发现当前处理的是一个operator=(const vector<_Tp, _Alloc>& __x),它正在执行复制作业.

我搜索了整个文件,没有任何功能operator=(vector<_Tp, _Alloc>&& __x),所以我如何从移动和rvalue featrue中受益?

我的c ++标题在/usr/include/c++/5,我检查的文件是vector.tcc.

Sto*_*ica 6

它确实支持移动分配,但您试图滥用它.你接受bufferconst引用.移动分配需要修改.你的编译器试图告诉你.

快速修复是通过非const引用接受.更好的解决方法是buffer通过rvalue引用接受.这样,当他们的矢量内容被盗时,来电者注定不会感到惊讶.

更好的解决方法是按值接受.这样调用者就可以完全控制传递缓冲区的创建方式.并且您的功能在更多实例中可用.