Bezug nehmend auf Ссылка
Ich laufe unter Code:
%Vor%Die Ausgabe, die ich bekam:
%Vor%Ich verstehe, dass der Compiler den Code möglicherweise durch unnötiges Kopieren optimiert hat, was er hier nicht tut.
Aber was ich fragen möchte, wie wird two calls to the copy constructor
gemacht?
catch(C c)
- Da wir den Wert übergeben, wird hier der Kopierkonstruktor aufgerufen.
Aber bei throw c
Wie wird der Kopierkonstruktor aufgerufen? Kann jemand erklären?
Erstellt ein temporäres Objekt, und dieses temporäre Objekt wird geworfen. Die Erstellung des temporären kann durch Kopieren / Verschieben-Konstruktor erfolgen. Und ja, diese Kopie / Bewegung kann weggelassen werden.
Referenzen:
C ++ 11 15.1 Eine Ausnahme auslösen
§3:
Ein throw-Ausdruck initialisiert ein temporäres Objekt namens Exception-Objekt , dessen Typ bestimmt wird, indem alle cv-Qualifikationsmerkmale auf oberster Ebene vom statischen Typ des Operanden throw und adjusting entfernt werden der Typ .........
§5:
Wenn das geworfene Objekt ein Klassenobjekt ist, müssen der Kopier- / Verschiebungskonstruktor und der Destruktor zugänglich sein, selbst wenn die Kopier- / Verschiebeoperation weggelassen wird (12.8).
Tags und Links c++