Move semantics este un nume colectiv pentru instrumentele specializate ale limbajului de programare C++ care sunt concepute pentru a muta datele în timpul inițializării și pentru a construi noi obiecte, ceea ce reduce costurile de copiere. Pentru a implementa semantica de mutare, sintaxa C++ a introdus referințe rvalue , precum și constructori de mutare și operatorul de atribuire a mutarii [1] .
Apariția semanticii mutarii în standardul limbajului C++ a avut loc odată cu lansarea standardului C++11 actualizat ; a fost dictată de nevoia de optimizare a costurilor de calcul acolo unde a fost aplicată anterior semantica pass-by-value [2] .
Introducerea semanticii mișcării datelor în standardul limbajului a fost foarte apreciată de comunitatea dezvoltatorilor datorită faptului că oferă oportunități ample de optimizare a codului intern al apelurilor de funcții și al metodelor de clasă. Această optimizare se realizează prin necopiarea datelor atunci când se creează obiecte temporare care nu trebuie să-și salveze resursele interne pentru utilizare ulterioară [3] .
Apariția semanticii mișcării în standard a necesitat formalizarea derivării argumentelor de tipuri parametrizate (șabloane) și utilizarea lor, în legătură cu care a apărut reglementarea transmisiei directe [4] , iar „ regula celor trei ” a evoluat în „ regula de cinci”: acum, la gestionarea memoriei, pe lângă constructorul de copiere, destructorul și operatorul de atribuire a copiei, dezvoltatorul trebuie să definească un constructor de mutare și un operator de atribuire a mișcării [5] . Compilatorului i se permite să le invoce automat atunci când argumentele lor se potrivesc cu definiția unei valori r [6] .