Move semantics är ett samlingsnamn för specialiserade C++ programmeringsspråksverktyg som är designade för att flytta data under initialisering och konstruera nya objekt, vilket minskar kopieringskostnaderna. För att implementera rörelsesemantik introducerade C++-syntaxen rvalue- referenser, såväl som rörelsekonstruktorer och rörelsetilldelningsoperatorn [1] .
Uppkomsten av rörelsesemantik i språkstandarden C++ skedde med lanseringen av den uppdaterade C++11- standarden ; det dikterades av behovet av att optimera beräkningskostnader där pass-by-value semantik tidigare hade tillämpats [2] .
Införandet av semantik för datarörelser i språkstandarden har uppskattats mycket av utvecklargemenskapen på grund av att det ger stora möjligheter att optimera den interna koden för funktionsanrop och klassmetoder. Denna optimering uppnås genom att inte kopiera data när man skapar tillfälliga objekt som inte behöver spara sina interna resurser för vidare användning [3] .
Uppkomsten av rörelsesemantik i standarden krävde en formalisering av härledningen av argument av parametriserade typer (mallar) och deras användning, i samband med vilken regleringen för direkt överföring [4] dök upp och " regeln om tre " utvecklades till " regel om fem”: nu, när han hanterar minne, behöver utvecklaren, förutom kopieringskonstruktören, destruktorn och kopieringstilldelningsoperatorn, definiera en flyttkonstruktor och en flytttilldelningsoperator [5] . Kompilatorn får automatiskt anropa dem när deras argument matchar definitionen av ett rvärde [6] .