Bu kod beni karıştırır:std :: map içindeki anahtar/değer türleri için gereksinimleri kopyala/taşı
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;
}
Orada hiçbir hata alıyorum olduğundan, (hatta bunun içine başka önemli nesnesinin taşınmasının) hiçbir anahtar nesne oluşturulan bir harita taşırken gibi görünüyor.
Neden değil? Bu davranışa C++ 11 standardına göre güvenebilir miyim?
Daha genel olarak, anahtarında std::map
anahtar ve değer türleri üzerinde hangi koşullar altında kopyalanıyor?
atanır. –
@MooingDuck, allocator türünün –
ah doğru yaymadığı durumlarda doğru değil, ayırıcılar her şeye karışabilirler. –