此代码混淆了我:复制/移动std :: map中的键/值类型的要求?
struct foo {
int i;
foo(int j) : i(j) {}
foo(const foo &) = delete;
foo(foo &&) = delete;
foo &operator=(const foo&) = delete;
foo &operator=(foo&&) = delete;
};
bool operator<(const foo &f1, const foo &f2)
{
return f1.i < f2.i;
}
int main(int argc, char **argv)
{
std::map<foo,int> f;
std::map<foo,int> f2 = f; //error (as expected)
std::map<foo,int> f3 = std::move(f); //no error (why?)
return 0;
}
因为我没有得到任何错误,它似乎移动地图没有按键对象被创建(甚至是移动的另一个关键对象到它不重要)等。
为什么不呢?我可以依赖C++ 11标准的这种行为吗?
更一般地说,在密钥和值类型以及在什么条件下,std::map
位置上有什么复制/移动要求?
移动地图放置关键和值_no_要求。 –
@MooingDuck,如果分配器类型不会传播 –
啊,那么分配器就可以搞砸了。 –