sagen, dass ich die folgende FunktionWarum erstellt C++ nicht standardmäßig rValue-Referenzen?
void doWork(Widget && param) // param is an LVALUE of RRef type
{
Widget store = std::move(param);
}
Warum muss ich param
zurück zu einem R-Wert mit std::move()
werfen müssen? Sollte es nicht offensichtlich sein, dass der Typ param
rvalue ist, da er in der Funktionssignatur als R-Wert-Referenz deklariert wurde? Sollte hier nicht automatisch der Move-Konstruktor nach diesem Prinzip aufgerufen werden?
Warum passiert das nicht standardmäßig?
Oh, ich verstehe. Es macht Sinn! Ich stimme zu, das Kopierdesign ist immer sicherer als implizite Bewegung! – barney
@ Barney diesen Moment, wenn ein einfaches Beispiel dich gehen lässt "Oh, ich verstehe. Es macht Sinn!" Freut mich, ich könnte einen zur Verfügung stellen. – bolov
Ich finde es wirklich schwierig, tatsächlich einen Code zu finden, der das tut, und noch mehr kann ein Compiler nicht als Fehler erkennen und behandeln. Gab es eine Diskussion für den Vorschlag über die relativen Kompromisse, oder gibt es eine Situation, die viel wahrscheinlicher ist? –