最小可复制示例cpp.sh/2nlzz:
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int main()
{
struct Movable {
Movable() = default;
Movable ( Movable && ) = default; // move constructor
vector<int> payload;
};
unordered_map<int, Movable> map;
vector<Movable> target(10);
int i = 0;
for(auto& it : map) {
target[i] = move(it.second);
++i;
}
}
给我
19:15: error: use of deleted function 'main()::Movable& main()::Movable::operator=(const main()::Movable&)'
10:10: note: 'main()::Movable& main()::Movable::operator=(const main()::Movable&)' is implicitly declared as deleted because 'main()::Movable' declares a move constructor or move assignment operator
我确实为它定义了一个移动构造函数,Movable
并希望它只被移动,而不是被复制,所以它不使用常规赋值运算符很好,我猜它试图使用它,因为it.second
返回 aconst Movable &
而不是 a Movable &
,但为什么呢?
我知道这it.first
必须是 const,因为键不能被弄乱,但是从值中移动应该没问题。
为什么我在这里得到一个 const 引用,我怎样才能修复代码以便我可以移动?