Heim > Backend-Entwicklung > C++ > Wann überspringt C den Kopierkonstruktor?

Wann überspringt C den Kopierkonstruktor?

Linda Hamilton
Freigeben: 2024-12-21 08:10:10
Original
220 Leute haben es durchsucht

When Does C   Skip the Copy Constructor?

Optimierung des Kopierkonstruktors in C

In C kann der Kopierkonstruktor unter bestimmten Umständen möglicherweise nicht aufgerufen werden, was Fragen zur Compileroptimierung aufwirft die undokumentierten Funktionen der Sprache.

Bedenken Sie Folgendes Code:

class A
{
public:
    A(int value) : value_(value)
    {
        cout << "Regular constructor" << endl;
    }

    A(const A& other) : value_(other.value_)
    {
        cout << "Copy constructor" << endl;
    }

private:
    int value_;
};

int main()
{
    A a = A(5);
}
Nach dem Login kopieren

Man würde erwarten, dass die Ausgabe sowohl „Regulärer Konstruktor“- als auch „Konstruktor kopieren“-Nachrichten enthält. Allerdings wird in diesem Fall der Kopierkonstruktor nie aufgerufen.

Dieses Verhalten ist weder eine Compileroptimierung noch eine undokumentierte Funktion von C . Stattdessen ist im C-Standard (§12.8.15) explizit festgelegt, dass Zuweisungen wie T = x; kann als T(x); interpretiert werden, wodurch das innere T effektiv eliminiert wird, wenn keine Kopie erforderlich ist.

In diesem speziellen Fall erkennt der Compiler, dass das Erstellen eines A-Objekts und das anschließende Kopieren desselben überflüssig ist und lässt daher den Aufruf des Kopierkonstruktors aus.

Um den Aufruf des Kopierkonstruktors zu erzwingen, kann man explizit das erste A-Objekt erstellen:

A a; // Construct an empty A object
a = A(5); // Copy-initialize it with another A object
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWann überspringt C den Kopierkonstruktor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage