Heim >Backend-Entwicklung >C++ >Wie unterscheiden sich die Generierungsregeln für automatische Verschiebungsvorgänge zwischen C 98 und C 11?
In C 98 konnte der Compiler automatisch Kopierkonstruktoren und Kopierzuweisungsoperatoren durch mitgliedweises Kopieren erstellen. Dieser Prozess wurde mit der Einführung der Bewegungssemantik auf C 11 ausgedehnt. Die Regeln für die automatische Generierung von Verschiebevorgängen unterscheiden sich jedoch von denen für Kopiervorgänge.
Howard Hinnants ACCU 2014-Präsentation bietet einen kurzen Überblick über diese Regeln. Die folgende Tabelle fasst die wichtigsten Punkte zusammen:
</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>
Ja: Automatisch generiert.
Nein: Nicht automatisch generiert.
*Aber nur implizit definiert (nicht deklariert oder deklariert=Standard). Explizite Definitionen unterdrücken die Generierung.
Diese Regeln weisen darauf hin, dass Verschiebungskonstruktoren und Verschiebungszuweisungsoperatoren in C 11 im Allgemeinen automatisch generiert werden, es jedoch einige Fälle gibt, in denen dies möglicherweise nicht der Fall ist. Wenn der Destruktor beispielsweise explizit definiert ist, werden die Verschiebungsoperationen nicht generiert. Ebenso wird durch die explizite Definition von Verschiebungsvorgängen selbst die automatische Generierung unterdrückt.
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich die Generierungsregeln für automatische Verschiebungsvorgänge zwischen C 98 und C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!