


Warum bevorzugt die implizite Verschiebungsregel einen Kopierkonstruktor gegenüber einem Verschiebungskonstruktor, wenn der Verschiebungskonstruktor nicht verfügbar ist?
Nov 05, 2024 am 10:36 AMEin Klassenobjekt nach Wert mit impliziter Verschiebungsregel zurückgeben
Bei der Rückgabe eines Objekts einer Klasse nach Wert aus einer Funktion erfolgt die implizite Verschiebung Regel kommt ins Spiel. Diese Regel bestimmt, welcher Konstruktor zum Initialisieren des zurückgegebenen Objekts verwendet werden soll. Normalerweise wird der Verschiebungskonstruktor bevorzugt, wenn das Objekt als X-Wert betrachtet wird (ein Ausdruck, aus dem verschoben werden kann).
In Ihrem Beispiel 1 habe ich die Variable in Some_thing() deklariert. Die Funktion ist ein X-Wert, da sie in einem lokalen Bereich deklariert ist und als verschiebungsfähig gilt. Daher wird der Verschiebungskonstruktor test(test&& s) aufgerufen, wie in der Ausgabe gezeigt.
In Beispiel 2 haben Sie jedoch den Verschiebungskonstruktor entfernt und den zu testenden Kopierkonstruktor geändert (test&z). Diese Änderung führte dazu, dass in der Ausgabe der Aufruf des Kopierkonstruktors test(test& z) anstelle des Verschiebungskonstruktors angezeigt wurde, was aufgrund der impliziten Verschiebungsregel erwartet wurde.
Dieses scheinbar widersprüchliche Verhalten tritt auf, weil i immer noch berücksichtigt wird ein x-Wert, aber der Compiler betrachtet jetzt auch den „normalen“ Kopierkonstruktor als machbar. Die implizite Verschiebungsregel versucht zunächst, den Verschiebungskonstruktor zu verwenden, aber da keiner vorhanden ist, verwendet sie weiterhin den Kopierkonstruktor.
Um die Verwendung eines Verschiebungskonstruktors explizit zu erzwingen, können Sie den Kopierkonstruktor löschen , wie in Beispiel 3 gezeigt. Dies verhindert, dass der Compiler den Kopierkonstruktor als Option berücksichtigt, und der Verschiebungskonstruktor wird auch dann verwendet, wenn er als const markiert ist (was normalerweise das Verschieben verhindert).
Beispiel 4 zeigt dies Ein const-Objekt kann immer noch verschoben werden, wenn der Verschiebungskonstruktor verfügbar ist und die Verschiebungsoperation „noexclusive“ ist. In diesem Fall wird das während der Initialisierung von u erstellte temporäre Objekt nach r verschoben, was zum Aufruf des Verschiebungskonstruktors führt.
Das obige ist der detaillierte Inhalt vonWarum bevorzugt die implizite Verschiebungsregel einen Kopierkonstruktor gegenüber einem Verschiebungskonstruktor, wenn der Verschiebungskonstruktor nicht verfügbar ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
