2016-06-15 10 views
0
#include <iostream> 
using namespace std; 

int main() { 
    int var; // default initialization var = 0 Why? 
    cout << var << endl;  
    return 0; 
} 

Wenn ich die Standardinitialisierung richtig verstehe, muss die int-Variable ein unbestimmter Wert sein.Standardinitialisierung in der main() - Funktion

Die Wirkungen von Standardinitialisierung sind: 1), wenn T einen nicht-POD (bis C++ 11) Klasse-Typ ist, werden die Konstruktoren betrachtet und Auflösung gegen die leere Argumentliste Überlastung ausgesetzt. Der ausgewählte Konstruktor (der einer der Standardkonstruktoren ist) wird aufgerufen, um den Anfangswert für das neue Objekt bereitzustellen; 2) Wenn T ein Array-Typ ist, wird jedes Element des Arrays standardmäßig initialisiert; 3) Ansonsten wird nichts unternommen: Die Objekte mit automatischer Speicherdauer (und deren Unterobjekte) werden initialisiert, um die Werte zu bestimmen.

Also, warum int var gleich 0 in diesem Fall?

+0

Ja, es ist ein unbestimmter Wert. Der Versuch, einen unbestimmten Wert auszugeben, führt zu undefiniertem Verhalten. Undefiniertes Verhalten bedeutet, dass alles passieren kann. Drucken von 0 ist ein möglicher Fall von "alles". –

Antwort

1

Ihr Verständnis ist richtig. var hier enthält Müll Wert hier, es war zufällig 0.

Müllwert muss nicht einige scheinen zufällige Wert, normalerweise ist es der Wert, der in diesem Speicher passiert ist. Führen Sie Ihr Programm erneut aus, oder ändern Sie einen anderen Compiler, wahrscheinlich sehen Sie ein anderes Ergebnis.

+2

Ablehnung. Es gibt eine Menge Duplikate auf dieser Seite, die besser verlinkt werden als Antwort – Tas

+0

Hier kennt das OP die Regel der Standardinitialisierung. Er hat nur missverstanden, dass "0" ein möglicher Wert für den Müllwert sein könnte. Ich habe das Duplikat nicht gefunden, das diese spezielle Frage beantwortet. –

Verwandte Themen