Questo codice mi confonde:Copia/sposta i requisiti per i tipi di chiave/valore in una 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;
}
perché ricevo alcun errore là, sembra che quando si sposta una mappa viene creato alcun oggetto chiave (nemmeno per lo spostamento di un altro oggetto chiave in esso).
Perché no? Posso fare affidamento su questo comportamento secondo lo standard C++ 11?
Più in generale, quali requisiti di copia/spostamento fa un std::map
posto sulla chiave e tipi di valore ea quali condizioni?
Lo spostamento di una mappa pone _no_ requisiti sulla chiave e sul valore. –
@MooingDuck, non è vero se il tipo di allocatore non si propaga a destra di –
, gli allocatori possono rovinare tutto. –