Warum können Sie einen Kopierkonstruktor aufrufen, der das zu erstellende Objekt übergibt? (C ++) (gcc) [duplizieren]

8
%Vor%

Dies wird kompiliert.

  

gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
g++ -o main main.cpp -Wall -w -ansi

Ich erhalte keine Warnungen.

Warum scheint dies ein gültiges C ++ zu sein? Wird dies irgendwo im Standard erwähnt? Gibt es Warnhinweise, die dies für gcc melden können?

Wenn die Klasse über Mitgliedsdaten verfügt, werden die Daten zufällig übergeben.
Beispiel:

%Vor%
  

Ausgabe: -482728464

Was ist hier los? Wie kann ich mich selbst davon abhalten, dies versehentlich zu tun? - Ist es möglich, einen Compilerfehler zu machen?

    
Trevor Hickey 09.10.2012, 01:32
quelle

1 Antwort

10
  

(§ 3.3.2 / 1) Der Punkt der Deklaration für einen Namen ist unmittelbar nach seinem vollständigen Deklarator (Abschnitt 8) und vor seinem Initialisierer (falls vorhanden) , außer wie unten angegeben. [Beispiel:

%Vor%      

Hier wird das zweite x mit einem eigenen (unbestimmten) Wert initialisiert. -End-Beispiel]

Dies gilt auch für benutzerdefinierte Typen, z. B. Ihre class A . Der verwendete Kopierkonstruktor ist der Standardwert, der vom Compiler automatisch generiert wird.

    
jogojapan 09.10.2012, 01:37
quelle

Tags und Links