Maison  >  Article  >  développement back-end  >  Pourquoi les implémentations de déplacement par défaut étaient-elles absentes dans les premières versions de C 11 ?

Pourquoi les implémentations de déplacement par défaut étaient-elles absentes dans les premières versions de C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 19:13:02181parcourir

Why Were Default Move Implementations Absent in Early C  11 Drafts?

Pourquoi les implémentations de déplacement par défaut sont-elles absentes des premières versions C 11 ?

Dans les premières versions de la norme C 11, la génération implicite de constructeurs de déplacement et d'opérateurs d'affectation était un sujet de débat. Cela a conduit à des modifications dans les versions ultérieures, entraînant le comportement suivant dans les compilateurs actuellement disponibles :

Sémantique des déplacements implicites

Depuis la version de novembre de la norme C (N3225), les constructeurs de déplacements implicites et l'affectation Les opérateurs peuvent être générés dans les conditions suivantes :

  • La classe n'a pas de constructeur de copie déclaré par l'utilisateur.
  • La classe n'a pas d'opérateur d'affectation de copie déclaré par l'utilisateur.
  • La classe n'a pas d'opérateur d'affectation de déplacement déclaré par l'utilisateur.
  • La classe n'a pas de destructeur déclaré par l'utilisateur.
  • Le constructeur de déplacement ne serait pas implicitement défini comme supprimé.

Expliquer l'absence dans les premières versions

La décision de ne pas inclure les implémentations de constructeur/affectation de déplacement par défaut dans les premières versions était le résultat de préoccupations concernant le potentiel de confusion et de comportement inattendu. Cependant, les révisions ultérieures ont résolu ces problèmes en resserrant les conditions de génération de mouvements implicites.

Solution de contournement

Si vous cherchez un moyen d'utiliser la sémantique de déplacement sans écrire de constructeurs/opérateurs d'affectation explicites , vous pouvez utiliser la [macro de GManNickG](https://stackoverflow.com/a/12316884/8674521). Cette macro génère la sémantique de déplacement nécessaire pour votre classe.

En implémentant la sémantique de déplacement, vous pouvez également refuser de fournir une fonction de membre d'échange.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn