2016-05-21 7 views
-2

Ich bin ein wenig Erfahrung im Bereich von C# und seine Compiler setzen nicht initialisierte Variablen auf Null. Ich fand this, die Antwort für meine erste Frage ist - warum C++ nicht tut.Wie C++ - Compiler zufälligen Wert auf nicht initialisierte Variablen setzen?

Aber jetzt - wie C++ - Compiler "zufällige Variable" wählt?

Ich denke, es ist etwas interessanter/fortgeschritten als "weil es so funktioniert".

+0

Es wird nicht auf einen zufälligen Wert gesetzt. Es ist nur * nicht * überschreiben, was dort mit 0 ist. – Joe

+0

Ok, aber wie es funktioniert? Ich erstelle eine neue Variable, legt keinen Wert fest, also hat sie nur eine Speicheradresse. Also wenn ich es drucken will - woher kommt der Compiler? Warum ist es 223 und nicht 123467? – Szkaplerny

+0

Über welche Variablen sprechen Sie? Lokale Variablen? Felder in einer Klasse? Etwas anderes? –

Antwort

1

Die Werte sind nicht "zufällig", sie sind nur, was auch immer passiert ist. Das bedeutet, dass eine Variable nicht initialisiert werden muss.

+1

* "Sie sind nur, was auch immer passiert ist, in Erinnerung zu sein." * Das stimmt im Allgemeinen nicht . –

+0

@BaummitAugen: Wie kannst du das sagen? – Destructor

+1

@Destructor MSVC überschreibt sie explizit mit Debug-Werten in Debug-Builds, einige Plattformen haben * "ungültige" * Register, ... Die Aussage ist einfach nicht wahr. –

0

Dies ist implementierungsabhängig, aber der Compiler wählt normalerweise keinen Wert für die Variable. Stattdessen ordnet der Compiler Speicherplatz auf dem Stack zu, in dem die Variable gespeichert wird, gibt dort jedoch keinen Wert an. Also, wenn Sie die nicht initialisierte Variable lesen, werden Sie wahrscheinlich alles bekommen, was vorher auf dem Stapel war.