Faustregel für die Übergabe von Werten ist schneller als die Übergabe von Konstantenreferenzen?

Angenommen, ich habe eine Funktion, die ein Argument vom Typ @ annimmT. Es mutiert es nicht, so dass ich die Wahl habe, es als const reference @ zu übergebeconst T& oder nach WertT:

void foo(T t){ ... }
void foo(const T& t){ ... }

Gibt es eine Faustregel, wie großT sollte vor der Übergabe von const Referenz wird billiger als die Übergabe von Wert? Angenommen, ich weiß, dasssizeof(T) == 24. Soll ich eine const-Referenz oder einen const-Wert verwenden?

Ich nehme an, dass der Kopierkonstruktor vonT ist trivial. Ansonsten hängt die Antwort auf die Frage natürlich von der Komplexität des Kopierkonstruktors ab.

Ich habe schon nach ähnlichen Fragen gesucht und bin auf diese gestoßen:

template übergebe Wert oder Konstantenreferenz oder ...?

Die akzeptierte Antwort https: //stackoverflow.com/a/4876937/140861) gibt keine Details an, sondern lediglich:

Wenn Sie davon ausgehen, dass T immer ein numerischer Typ oder ein Typ ist, der sehr billig zu kopieren ist, können Sie das Argument nach Wert sortieren.

So löst es meine Frage nicht, sondern formuliert sie um: Wie klein muss ein Typ sein, um "sehr billig zu kopieren" zu sein?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage