Ich arbeite durch Kapitel 18 von Stroustrups Prinzipien und Praxis und stehe auf einem Teil, der mit Kopierern zusammenhängt.Wann wird ein Kopierkonstruktor in C++ aufgerufen? - Funktionsrückgabe
Ich habe eine Kopie Konstruktor wie folgt definiert:
X(const X& x) {
out("X(X&)");
val = x.val;
}
X eine Struktur ist. val ist nur ein int Wert von X 'out' ist:
void out(const string& s) {
cerr << this << "->" << s << ": " << val << "\n";
}
Ich habe auch die folgenden zwei Funktionen definiert:
X copy(X a) {
return a;
}
und
X copy2(X a) {
X aa = a;
return aa;
}
In Haupt-I haben:
X loc(4);
X loc2 = loc;
loc2 = copy(loc);
loc2 = copy2(loc);
Wenn ich nur copy aufruft, wird der Kopierkonstruktor zweimal aufgerufen: einmal für den Parameterbereich von copy und einmal für den Rückruf. Das macht für mich Sinn.
Wenn ich jedoch copy2 aufrufe, wird der Kopierkonstruktor nur noch zweimal aufgerufen: einmal für das Funktionsargument und einmal für 'X aa = a'. Warum ist es nicht auch für die Rückkehr erforderlich?
Der Link ist sehr hilfreich, danke Tatsuyuki –