A Move szemantics a speciális C++ programozási nyelvi eszközök gyűjtőneve , amelyek az inicializálás során adatok mozgatására és új objektumok létrehozására szolgálnak, ami csökkenti a másolási költségeket. A mozgatási szemantika megvalósításához a C++ szintaxis bevezette az rvalue hivatkozásokat, valamint a mozgatási konstruktorokat és a mozgatási hozzárendelés operátort [1] .
A mozgatási szemantika megjelenése a C++ nyelvi szabványban a frissített C++11 szabvány kiadásával történt ; ezt a számítási költségek optimalizálásának igénye diktálta ott, ahol korábban alkalmazták a pass-by-value szemantikát [2] .
Az adatmozgási szemantika nyelvi szabványba való bevezetését a fejlesztői közösség nagyra értékelte, mivel ez bőséges lehetőséget kínál a függvényhívások és osztálymetódusok belső kódjának optimalizálására. Ezt az optimalizálást úgy érik el, hogy nem másolnak adatokat olyan ideiglenes objektumok létrehozásakor, amelyeknek nem kell menteni a belső erőforrásaikat a további felhasználáshoz [3] .
A mozgásszemantika szabványban való megjelenése megkövetelte a paraméterezett típusú argumentumok (sablonok) levezetésének és használatának formalizálását, amellyel kapcsolatban megjelent a közvetlen átviteli szabályozás [4] , és a „ három szabálya ” a „ ötös szabály”: most a memória kezelésekor a másoláskonstruktoron, destruktoron és másolás-hozzárendelés operátoron kívül a fejlesztőnek meg kell határoznia egy mozgatási konstruktort és egy áthelyezési hozzárendelés operátort is [5] . A fordító automatikusan meghívhatja őket, ha argumentumaik egyeznek egy rvalue [6] definíciójával .