


Warum wird der C 11 Move-Konstruktor nicht aufgerufen, wenn ein Objekt aus einem temporären Objekt erstellt wird?
C 11-Verschiebungskonstruktor nicht aufgerufen, Standardkonstruktor bevorzugt
In bestimmten Szenarien kann der C 11-Verschiebungskonstruktor nicht aufgerufen werden, was den Vorteil hat Stattdessen wird der Standardkonstruktor verwendet. Um zu verstehen, warum, schauen wir uns ein Beispiel an.
Betrachten Sie die folgende Klasse:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Mit dieser Klasse können wir Objekte wie folgt erstellen:
1 2 3 4 5 6 7 8 9 10 |
|
The Die erwartete Ausgabe wäre:
1 2 3 4 5 6 |
|
Wir beobachten jedoch, dass der Verschiebungskonstruktor in der letzten Zeile nicht aufgerufen wird. Stattdessen wird der Standardkonstruktor verwendet. Um dies zu erklären, müssen wir Kopierelision verstehen.
Kopierelision ist eine Optimierungstechnik, die der C 11-Standard unter bestimmten Bedingungen zulässt. Es ermöglicht dem Compiler, ein temporäres Objekt direkt in das Zielobjekt zu konstruieren, wodurch der Aufwand für das Kopieren/Verschieben von Konstruktoren und Destruktoren vermieden wird.
In diesem Beispiel wird das aus dem temporären „Test“ erstellte X-Objekt in z eliminiert. Dies bedeutet, dass kein Kopier-/Verschiebekonstruktor aufgerufen wird und stattdessen das Objekt direkt in z konstruiert wird.
Der Compiler kann eine Kopierelision durchführen, wenn alle diese Bedingungen erfüllt sind:
- Das Objekt ist ein temporäres Objekt, das nicht an eine Referenz gebunden wurde.
- Das Objekt wird in ein Objekt desselben cv-unqualifizierten Typs kopiert/verschoben.
In unserem In diesem Fall sind diese Bedingungen erfüllt und es kommt zu einer Kopierelision, die dazu führt, dass der Standardkonstruktor anstelle des Verschiebungskonstruktors verwendet wird. Um den Move-Konstruktor explizit aufzurufen, können Sie std::move verwenden, wie in:
1 |
|
Das obige ist der detaillierte Inhalt vonWarum wird der C 11 Move-Konstruktor nicht aufgerufen, wenn ein Objekt aus einem temporären Objekt erstellt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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

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

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

eindeutiger Gebrauch und Phrasenfreigabe

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

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