Sono po 'perplesso su come governa standard di questo caso:std :: movimento e mappa assegnazione
struct Foo {
Foo & operator = (std::string xxx)
{
x = std::move(xxx);
return *this;
}
std::string x;
};
std::map<std::string, Foo> bar;
std::string baz = "some string";
bar[baz] = std::move(baz);
Può compilatori produrre codice in modo che baz
saranno spostati prima è usato per inizializzare e ottenere di riferimento all'elemento in bar
(per inizializzare std::string xxx
)? O questo codice è sicuro e non c'è il comportamento non definito ?
Non è UB, ma non garantito per funzionare, neanche. –
Vedere [this] (http://coliru.stacked-crooked.com/a/5ef8993192148d84) versione semplificata del codice. 'std :: map' e l'operatore di assegnazione non devono essere coinvolti affinché ciò avvenga e la loro presenza non modifica il problema sottostante con il codice. – Mankarse
@Mankarse, sì, infatti, tutto può essere ridotto a questo caso – GreenScape