Non capisco cosa contenga effettivamente un'istanza di std::function
.Devo passare std :: function by-value o by (rvalue) -reference?
È più efficiente passarlo per valore o per riferimento?
Quali sono gli effetti delle prestazioni nei seguenti esempi?
by-value:
void printStats(std::function<void(const char *)> printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
da rvalue riferimento:
void printStats(std::function<void(const char *)>&& printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Intendevi al basso per riferimento o per riferimento di rvalue. Il tuo titolo dice una cosa ma il codice un'altra. il riferimento di rvalue e il riferimento di lvalue funzionano in modo diverso. – NathanOliver
Penso che la risposta semplice sia di valore ma solo nel caso in cui non lo sapessi: [quando usare i modelli su 'std :: function'] (http://stackoverflow.com/questions/14677997/stdfunction-vs-template – Maikel
La copia di una 'std :: function' in genere richiede un'assegnazione di memoria dinamica, è quindi piuttosto costosa e dovrebbe quindi essere passata per riferimento. – nwp