Maison >développement back-end >C++ >Quand le compilateur C 11 génère-t-il automatiquement des opérations de déplacement ?

Quand le compilateur C 11 génère-t-il automatiquement des opérations de déplacement ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 07:53:12219parcourir

When Does the C  11 Compiler Automatically Generate Move Operations?

Règles de génération automatique des opérations de déplacement

En C 11, la capacité du compilateur à générer automatiquement des opérations de déplacement diffère des règles pour les opérations de copie en C 98.

Déplacer le constructeur et déplacer l'affectation Opérateur

Dans les conditions suivantes, le compilateur générera automatiquement un constructeur de déplacement et un opérateur d'affectation de déplacement :

  • 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 de constructeur de déplacement ni d'affectation de déplacement explicitement déclaré opérateur.

Cas où les opérations de déplacement ne sont pas automatiquement générées

Le compilateur ne générera pas automatiquement les opérations de déplacement si l'une des conditions suivantes est remplie :

  • La classe a un constructeur de copie et/ou un opérateur d'affectation de copie déclaré par l'utilisateur.
  • La classe a un constructeur de déplacement ou un opérateur d'affectation de déplacement explicitement déclaré, mais non défini.
  • La classe déclare un destructeur.

Outil de vérification des règles de génération automatique

La ressource suivante fournit une représentation visuelle des règles de génération automatique de membres spéciaux, y compris les opérations de déplacement :

[Image de Howard Diapositive de présentation de l'ACCU 2014 de Hinnant](https://i.sstatic.net/b2VBV.png)

Clarification supplémentaire

Les carrés rouges dans le tableau indiquent un comportement obsolète . Si vous souhaitez éviter de recourir à la dépréciation, envisagez de suivre la « règle de 3 » de C 98/03 : déclarez les deux membres de copie si vous déclarez le destructeur, ou déclarez au moins un membre de copie.

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