Automatische Generierung von Bewegungsoperationen
In C 11 warf die Einführung der Bewegungssemantik Fragen zu den Umständen auf, unter denen Bewegungskonstrukteure und Bewegungszuweisungen durchgeführt werden Operatoren werden automatisch generiert.
Unter C 11 werden Verschiebungsoperationen nicht automatisch generiert, wie Kopierkonstruktoren und Kopierzuweisungsoperatoren. Der Compiler generiert nur dann eine Verschiebungssemantik, wenn bestimmte Bedingungen erfüllt sind:
Das Verständnis dieser Regeln hilft bei der Implementierung von Klassen, die Bewegungssemantik verwenden. Die Tabelle aus der Präsentation von Howard Hinnant bietet einen kurzen Überblick über die automatische Generierung spezieller Elemente, einschließlich Verschiebungsvorgänge:
Declaration | Copy Constructor | Copy Assignment Operator | Move Constructor & Move Assignment Operator |
---|---|---|---|
None | Generated | Generated | Not Generated |
Copy Constructor | Not Generated | Generated | Not Generated |
Copy Assignment Operator | Not Generated | Not Generated | Not Generated |
Move Constructor | Not Generated | Not Generated | Not Generated |
Move Assignment Operator | Not Generated | Not Generated | Not Generated |
Destructor | Not Generated | Not Generated | Not Generated |
Copy Constructor & Copy Assignment Operator | Not Generated | Not Generated | Not Generated |
Copy Constructor & Move Constructor | Not Generated | Not Generated | Not Generated |
Copy Constructor & Move Assignment Operator | Not Generated | Not Generated | Not Generated |
Copy Assignment Operator & Move Constructor | Not Generated | Not Generated | Not Generated |
Copy Assignment Operator & Move Assignment Operator | Not Generated | Not Generated | Not Generated |
Move Constructor & Destructor | Not Generated | Not Generated | Not Generated |
Move Assignment Operator & Destructor | Not Generated | Not Generated | Not Generated |
Copy Constructor & Copy Assignment Operator & Move Constructor | Not Generated | Not Generated | Not Generated |
Copy Constructor & Copy Assignment Operator & Move Assignment Operator | Not Generated | Not Generated | Not Generated |
Copy Constructor & Move Constructor & Move Assignment Operator | Not Generated | Not Generated | Generated |
Copy Assignment Operator & Move Constructor & Move Assignment Operator | Not Generated | Not Generated | Generated |
Durch die Anerkennung dieser Regeln können Entwickler sicherstellen, dass ihre Klassen die Bewegungssemantik richtig nutzen und eine optimale Effizienz erreichen.
Das obige ist der detaillierte Inhalt vonWann werden Bewegungskonstruktoren und Bewegungszuweisungsoperatoren in C 11 automatisch generiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!