Ich habe den folgenden Code:Zwei Möglichkeiten des Standardkonstruktors Aufruf
struct B
{
//B() {}
int x;
int y;
};
void print(const B &b)
{
std::cout<<"x:"<<b.x<<std::endl;
std::cout<<"y:"<<b.y<<std::endl;
std::cout<<"--------"<<std::endl;
}
int main()
{
B b1 = B(); //init1
B b2; //init2
print(b1);
print(b2);
return 0;
}
Wenn ich Programm (VS2008, debug) beginnen Ich habe die folgende Ausgabe:
x:0
y:0
--------
x:-858993460
y:-858993460
--------
Wie Sie b1 sehen können. x und b1.y haben einen Wert von 0. Warum? Was ist der Unterschied zwischen init1 und init2?
Wenn ich Kommentar- B Konstruktor ich die folgende Ausgabe haben:
x:-858993460
y:-858993460
--------
x:-858993460
y:-858993460
--------
Kann jemand den Grund für dieses Verhalten erklären? Tnx im Voraus.
Wie erklärt dies die verschiedenen Ergebnisse für 'b1' und' b2'? – sth
Und der letzte Fall für "default-initialize" sollte sein "andernfalls wird keine Initialisierung durchgeführt." Das ist der entscheidende Unterschied hier. – sth
@sth: Nein, default-initalisierung muss andere Objekte zero-initialisieren, der entscheidende Punkt ist, dass POD-Typen mit automatischer Speicherdauer ohne expliziten Initialisierer nicht einmal default-initialisiert werden. –