Was ist der Grund, warum std :: bind und std :: thread immer Argumente kopieren?

Es ist bekannt, dass das Standardverhalten von std :: bind und std :: thread darin besteht, die übergebenen Argumente zu kopieren (oder zu verschieben). Um die Referenzsemantik zu verwenden, müssen Referenzwrapper verwendet werden.

Weiß jemand, warum dies ein gutes Standardverhalten macht? Esp. In C ++ 11 mit rWert-Referenz und perfekter Weiterleitung erscheint es mir sinnvoller, die Argumente einfach perfekt weiterzuleiten.

std :: make_shared kopiert / verschiebt jedoch nicht immer, sondern leitet die angegebenen Argumente perfekt weiter. Warum gibt es hier zwei scheinbar unterschiedliche Verhaltensweisen bei der Weiterleitung von Argumenten? (std :: thread und std :: bind, die immer kopieren / verschieben, vs std :: make_shared, die dies nicht tun)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage