std::vector 不支持右值赋值

std::vector do not support rvalue assignment

本文关键字:赋值 不支持 vector std      更新时间:2023-10-16

这是我的测试代码:

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

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

我搜索了整个文件,没有像operator=(vector<_Tp, _Alloc>&& __x)这样的功能,那么我如何从移动和右值功能中受益?

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

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

快速解决方法是通过非常量引用接受。更好的解决方法是已经通过右值引用接受buffer。这样,当矢量的内容被盗时,调用者注定不会感到惊讶。

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