Warum ist die Kopierinitialisierung so wie sie ist? Warum benötigen Sie den Kopierkonstruktor? [Duplikat]

8

Und bei der Kopierinitialisierung meine ich so:

%Vor%

Trotz der jahrelangen Programmierung in C ++ habe ich nie realisiert, dass der obige Code den Kopierkonstruktor benötigt (Danke an jogojapan). Das Temporäre war immer elide gewesen, und als solches wusste ich nie, dass es überhaupt existierte (zumindest auf einer oberflächlichen Ebene, obwohl es weg optimiert wurde), bis es auf mich hingewiesen wurde.

Nach einer ordentlichen Portion Googeln, habe ich die Idee, wie es funktioniert. Meine Frage ist warum ist es so wie es ist?

Warum hat der Standard es nicht so gemacht, dass das obige Beispiel den Kopierkonstruktor nicht benötigt? Gibt es einen speziellen Fall / ein Beispiel, der zeigt, dass das Kopieren des Konstruktors bei dieser Art der Initialisierung wichtig ist?

Ohne eine anständige Erklärung dafür, warum Dinge so sind, wie sie sind, sehe ich das einfach als ein nervendes Artefakt, aber ich möchte lieber nicht ignorant sein, wenn etwas Wichtiges mir fehlt.

    
Cornstalks 04.12.2012, 04:18
quelle

1 Antwort

0

Die Kopierinitialisierung eines Objekts ist für die direkte Initialisierung mehrdeutig, beide können in gleichem Maße verwendet werden, um Werte zu setzen, die einander gleich sind.

%Vor%

alle diese Aufrufe sind mehrdeutig, sie setzen alle gleich 4. Der Grund für einen Kopierkonstruktor im Falle einer ganzen Zahl ist Bequemlichkeit, vorstellen, C ++ - Datentypen ohne diese

%Vor%

Sie könnten auch einen impliziten und expliziten Kopierkonstruktor verwenden, hier ist ein Beispielprogramm, das explizit einen Kopierkonstruktor verwendet, um imaginäre Zahlen zu verarbeiten:

%Vor%     
Syntactic Fructose 04.12.2012, 04:37
quelle