C++ std::vector不支持右值赋值

C++ std::vector不支持右值赋值,c++,c++11,vector,C++,C++11,Vector,以下是我的测试代码: void Test::test(const std::vector<uint8_t>& buffer) { std::vector<uint8_t> data; data = std::move(buffer); } void Test::Test(const std::vector和buffer){ std::矢量数据; 数据=标准::移动(缓冲区); } 这段代码似乎毫无意义,只是一个例子。 我在ide中使用代码导航来

以下是我的测试代码:

void Test::test(const std::vector<uint8_t>& buffer) {
    std::vector<uint8_t> data;
    data = std::move(buffer);
}
void Test::Test(const std::vector和buffer){
std::矢量数据;
数据=标准::移动(缓冲区);
}
这段代码似乎毫无意义,只是一个例子。 我在ide中使用代码导航来查找=运算符的实现,我发现最容易处理的是执行复制作业的
运算符=(const vector&\uux)

我搜索了整个文件,没有像
操作符=(vector&&&uux)
这样的功能,那么如何从移动和右值功能中获益呢


<>我的C++头在<代码> /Ur/Cube/C++ + 5 中,我检查的文件是“代码> vector .TCC < /C> > < /P> < P>它支持移动任务,但您正在试图滥用它。通过常量引用接受
缓冲区
。移动分配需要修改。您的编译器正试图告诉您这一点

快速修复方法是通过非常量引用接受。更好的解决方法是已经通过右值引用接受
缓冲区
。这样一来,当他们的向量内容被盗时,调用方就不会感到惊讶


更好的解决办法是按价值接受。这样,调用方就可以完全控制如何创建传递的缓冲区。您的函数在更多情况下可用。

它确实支持移动分配,但您试图滥用它。通过常量引用接受
缓冲区
。移动分配需要修改。您的编译器正试图告诉您这一点

快速修复方法是通过非常量引用接受。更好的解决方法是已经通过右值引用接受
缓冲区
。这样一来,当他们的向量内容被盗时,调用方就不会感到惊讶


更好的解决办法是按价值接受。这样,调用方就可以完全控制如何创建传递的缓冲区。您的函数在更多情况下可用。

谢谢您的回答,我这样做是有目的的。但是“不移动任务版本”的事情呢?我是在找错误的文件吗?@reavenisadesk-可能是。您没有指定编译器或生成标志。所以真的不知道。谢谢你的回答,我这么做是有目的的。但是“不移动任务版本”的事情呢?我是在找错误的文件吗?@reavenisadesk-可能是。您没有指定编译器或生成标志。所以我真的不知道。