Ich verstehe nicht ganz, was eine Instanz von std::function
tatsächlich enthält.Sollte ich std :: function by-value oder (rvalue) -reference übergeben?
Ist es effizienter, es als Wert oder als Referenz zu übergeben?
Was sind die Leistungseffekte in den folgenden Beispielen?
by-Wert:
void printStats(std::function<void(const char *)> printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
von rvalue-Referenz:
void printStats(std::function<void(const char *)>&& printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Meinst du Bass durch Referenz oder R-Wert Referenz? Dein Titel sagt eine Sache, aber der Code eine andere. Rvalue-Referenz und Lvalue-Referenz funktionieren anders. – NathanOliver
Ich denke, die einfache Antwort ist By-Wert, aber nur für den Fall, dass Sie nicht wussten: [wann Vorlagen über 'std :: function 'zu verwenden sind] (http://stackoverflow.com/questions/14677997/stdfunction-vs-template) – Maikel
Das Kopieren einer 'std :: function' erfordert in der Regel eine dynamische Speicherzuordnung, ist daher etwas teuer und sollte daher als Referenz übergeben werden. – nwp