2016-04-28 7 views
-1
#include <iostream> 

using namespace std; 

class Foo 
{ 
public: 
     int a; 
}; 
int main() 
{ 
     Foo f; 
     Foo f1(f); 
     cout<<f.a; 
     return 0; 
} 

Hier fa druckt Müll Wert initialisieren, aber wenn wir f1.a dann beide fa und f1.a hinzufügen initialisiert mit 0.Copykonstruktor tut primitive Datentypen

#include <iostream> 

using namespace std; 

class Foo 
{ 
public: 
     int a; 
}; 
int main() 
{ 
     Foo f; 
     Foo f1(f); 
     cout<<f.a<<f.b; 
     return 0; 
} 

Bitte helfen Sie mir, was zu verstehen ist der Grund dafür.

+1

Ihr zweites Beispiel kompiliert nicht. Bitte zeigen Sie echten Code. – MSalters

Antwort

3

Nicht initialisierte Variablen haben unbestimmte Werte, d. H. Was auch immer in diesem Speicher passiert ist. 0 ist einer der möglichen unbestimmten Werte sowie jeder andere Wert.

0

Kopieren c-tor initialisiert primitive Datentypen nicht, solange Sie sie nicht explizit deklarieren. Der Wert der nicht initialisierten Variablen wird durch den RAM-Speicherplatz-Wert bestimmt, der zu dieser Variablen gehört, also könnte es alles sein. Aber es ist wahrscheinlicher, dass dieser RAM auf 0 gesetzt wurde (wahrscheinlich nach einem Neustart).

+0

Nicht wegen Neustart. Wenn das Betriebssystem einem Prozess Speicher zuweist, muss es mit "0" gefüllt werden, damit vertrauliche Informationen von anderen Prozessen, die diesen physischen Speicher zuvor verwendet haben, nicht verloren gehen. –

Verwandte Themen