Ich würde gerne wissen, ob es überhaupt notwendig ist, Werte explizit zu verschieben, wenn ich nicht in einer Move-Konstruktor-/Move-Zuweisung bin. Lets sagt, dass ich die folgende Situation: mehr in der nachfolgenden CodeSollte ich einen Wert verschieben, den ich nicht mehr verwende?
struct Node
{
std::vector<int> items;
};
Node create()
{
std::vector<int> items;
items.push_back(2);
Node n;
// should I use n.items = std::move(items);
// instead?
n.items = items;
// other code, not using items any more
return n;
}
Zunächst einmal ist es richtig, einen L-Wert mit std::move
versehen zu bewegen, dass ich nicht den verschobenen Wert verwenden?
Zweitens ist es schneller, den Wert explizit zu verschieben, oder erkennt der Compiler automatisch, dass der Wert verschoben werden kann?
ein Umzug ist besser als eine Kopie – vu1p3n0x
Warum instanziieren Sie 'n' früher und sparen Sie sich den Ärger, indem Sie direkt in' n.items' drücken? – user4581301
@ user4581301 ist richtig. Kannst du dir ein nicht-konvertiertes Beispiel einfallen lassen? –