Pourquoi std::move s'appelle-t-il std::move ?
Malgré son nom, std::move(x) ne fonctionne pas physiquement déplacer n'importe quoi. Au lieu de cela, il s'agit simplement d'une conversion en une valeur r, connue spécifiquement sous le nom de valeur x. Ce terme contraste avec prvalue, qui fait référence à une expression avec une valeur fixe connue.
Le but de cette convention de dénomination avec std::move n'était pas d'induire en erreur, mais plutôt d'améliorer la lisibilité du code.
À l'origine, la conversion d'une lvalue en une rvalue nécessitait la syntaxe inconnue de static_cast
template <class T> void swap(T& a, T& b) { T tmp(static_cast<T&&>(a)); a = static_cast<T&&>(b); b = static_cast<T&&>(tmp); }
En remplaçant static_cast par std::move, le code devient plus intuitif et transmet l'intention de la fonction, qui est de déplacer des valeurs. plutôt que de les copier :
template <class T> void swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b); b = std::move(tmp); }
L'utilisation de std::move permet aux programmeurs de voir clairement que les valeurs sont déplacées, même s'ils ne comprennent pas complètement les détails complexes des rvalues et de la sémantique de déplacement.
De plus, les programmeurs sont libres de définir leurs propres fonctions ou macros pour convertir des valeurs en rvalues s'ils préfèrent. Par exemple, l'extrait de code suivant implémente la fonctionnalité de std::move en utilisant le nom set_value_category_to_xvalue:
template <class T> inline constexpr auto& set_value_category_to_xvalue(T&& t) noexcept { return static_cast<std::remove_reference_t<T>&>(t); }
En fin de compte, bien que le code objet généré pour std::move n'implique aucun mouvement réel, il joue un rôle important lors de la compilation. Cela modifie la surcharge d'une fonction qui est appelée, conduisant potentiellement à l'invocation d'opérateurs d'affectation de déplacement plus efficaces définis dans les classes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!