Inhaltsverzeichnis
Ein benanntes Objekt einer Klasse nach Wert und der impliziten Verschiebungsregel zurückgeben
Beispiel 2:
Die implizite Verschiebungsregel
Fazit
Heim Backend-Entwicklung C++ Wie funktioniert die implizite Verschiebungsregel, wenn in C ein benanntes Objekt nach Wert zurückgegeben wird?

Wie funktioniert die implizite Verschiebungsregel, wenn in C ein benanntes Objekt nach Wert zurückgegeben wird?

Nov 04, 2024 am 06:20 AM

How does the Implicit Move Rule work when returning a named object by value in C  ?

Ein benanntes Objekt einer Klasse nach Wert und der impliziten Verschiebungsregel zurückgeben

Bei der Rückgabe eines Objekts einer Klasse nach Wert von einer Funktion kommt die implizite Verschiebungsregel zum Einsatz ins Spiel. Diese Regel regelt das Verhalten des Compilers beim Erstellen eines temporären Objekts zur Aufnahme des zurückgegebenen Werts.

Beispiel 1:

Betrachten Sie den folgenden Codeausschnitt:

<code class="cpp">class test {
public:
    test(int y) {
        printf("test(int y)\n");
    }
    test() {
        printf("test()\n");
    }
    test(const test&amp; z) {
        printf("test(const test&amp;z)\n");
    }
    test(test&amp;&amp; s)noexcept {
        printf("test(test&amp;&amp; s)\n");
    }
    test&amp; operator=(test e) {
        printf("test&amp; operator=(test e)\n");
        return *this;
    }
};

test Some_thing() {
    test i;
    return i;
}

int main()
{
    Some_thing();
    return 0;
}</code>
Nach dem Login kopieren

Ausgabe :

test()
test(test&amp;&amp; s)
Nach dem Login kopieren

In diesem Beispiel gibt die Funktion Some_thing ein benanntes Objekt der Testklasse zurück, das mit dem Standardkonstruktor erstellt wurde. Da der Compiler aufgrund der NRVO (benannte Rückgabewertoptimierung) auf die Kopie verzichten kann, sehen wir die Ausgabe des Standardkonstruktors test() gefolgt vom impliziten Verschiebungskonstruktor test(test&& s).

Beispiel 2:

Jetzt ändern wir die Funktion „Something“, um stattdessen den Kopierkonstruktor zu verwenden.

<code class="cpp">class test {
public:
    test(int y) {
        printf("test(int y)\n");
    }
    test() {
        printf("test()\n");
    }
    test(test&amp; z) {
        printf("test(test&amp;z)\n");
    }
    test(test&amp;&amp; s)noexcept {
        printf("test(test&amp;&amp; s)\n");  // Deleted this constructor
    }
    test&amp; operator=(test e) {
        printf("test&amp; operator=(test e)\n");
        return *this;
    }
};

test Some_thing() {
    test i;
    return i;
}

int main()
{
    Some_thing();
    return 0;
}</code>
Nach dem Login kopieren

Ausgabe:

test()
test(test&amp;z)
Nach dem Login kopieren

Überraschenderweise wird dieser Code auch kompiliert und ausgeführt, sogar obwohl kein Verschiebungskonstruktor definiert ist. Dies liegt daran, dass die implizite Verschiebungsregel prüft, ob der Ausdruck i „verschiebungsberechtigt“ ist. In diesem Fall ist i eine lokale Variable, die verschoben werden kann. Daher kann der Compiler den Kopiervorgang trotzdem überspringen.

Die implizite Verschiebungsregel

Die implizite Verschiebungsregel wird ausgelöst, wenn Sie ein Objekt nach Wert zurückgeben und die folgenden Bedingungen erfüllt sind:

  • Der Ausdruck, der den zurückgegebenen Wert darstellt, ist zum Verschieben geeignet (d. h. er kann verschoben werden, ohne gegen Aliasing-Regeln zu verstoßen).
  • Es ist kein benutzerdefinierter Kopier- oder Verschiebungskonstruktor/Zuweisungsoperator möglich .

Fazit

Die implizite Verschiebungsregel bietet eine effiziente und präzise Möglichkeit, Objekte nach Wert zurückzugeben. Es hilft, Code zu optimieren, unnötiges Kopieren zu reduzieren und die Leistung zu verbessern. Es ist jedoch wichtig, die Grenzen zu verstehen und sich der potenziellen Probleme bewusst zu sein, die bei unsachgemäßer Verwendung auftreten können.

Das obige ist der detaillierte Inhalt vonWie funktioniert die implizite Verschiebungsregel, wenn in C ein benanntes Objekt nach Wert zurückgegeben wird?. 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