Maison >développement back-end >C++ >En quoi les règles de génération d'opérations de déplacement automatique diffèrent-elles entre C 98 et C 11 ?

En quoi les règles de génération d'opérations de déplacement automatique diffèrent-elles entre C 98 et C 11 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 05:32:161063parcourir

How Do Automatic Move Operation Generation Rules Differ Between C  98 and C  11?

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

En C 98, le compilateur pouvait créer automatiquement des constructeurs de copie et des opérateurs d'affectation de copie via une copie par membre. Ce processus s'est étendu au C 11 avec l'introduction de la sémantique des mouvements. Cependant, les règles de génération automatique des opérations de déplacement diffèrent de celles des opérations de copie.

La présentation ACCU 2014 de Howard Hinnant donne un aperçu concis de ces règles. Le tableau suivant résume les points clés :

</p>
<table>
<thead><tr>
<th> </th>
<th>Destructor</th>
<th>Move Constructor</th>
<th>Move Assignment Operator</th>
</tr></thead>
<tbody>
<tr>
<td>C  98/03</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>C  11 (Defect Report 1492)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>C  11 Final</td>
<td>Yes</td>
<td>Yes<sup>*</sup>
</td>
<td>Yes<sup>*</sup>
</td>
</tr>
</tbody>
</table>
<p>

Oui : Généré automatiquement.
Non : Pas automatiquement généré.

*Mais seulement implicitement défini (non déclaré ou déclaré = par défaut). Les définitions explicites suppriment la génération.

Ces règles indiquent que même si les constructeurs de déplacement et les opérateurs d'affectation de déplacement sont généralement générés automatiquement en C 11, il existe certains cas où ils peuvent ne pas l'être. Par exemple, si le destructeur est explicitement défini, les opérations de déplacement ne seront pas générées. De même, définir explicitement les opérations de déplacement elles-mêmes supprime la génération automatique.

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