Heim Backend-Entwicklung C++ Warum bevorzugt die implizite Verschiebungsregel einen Kopierkonstruktor gegenüber einem Verschiebungskonstruktor, wenn der Verschiebungskonstruktor nicht verfügbar ist?

Warum bevorzugt die implizite Verschiebungsregel einen Kopierkonstruktor gegenüber einem Verschiebungskonstruktor, wenn der Verschiebungskonstruktor nicht verfügbar ist?

Nov 05, 2024 am 10:36 AM

Why Does the Implicit Move Rule Prefer a Copy Constructor Over a Move Constructor When the Move Constructor is Unavailable?

Ein 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

See all articles