Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int i; // wenn C++ steht hier irgendwas, Java stünde hier 0 hierPassiertWas(); // besser wäre dann das int i; hier drunter zu deklarieren if(foo > 100){ i = 2; } else{ i = 3; } // hier hat i auf jeden Fall einen der Werte // da wäre es auch egal ob in i Schrott steht oder nicht bei der Deklaration |
Hello_Kitty!
unregistriert
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Hello_Kitty!« (09.09.2015, 17:36)
aber für die elementaren Datentypen wie int und float gilt, dass Variablen auf dem Heap (globale Variablen, alles außerhalb von Funktionen) mit 0 initialisiert werden.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Hier die ganzen #include's und evtl ein namespace class Foo { public: Foo(); ~Foo(); private: int m_iNum1; int m_iNum2; float m_fNum1; float m_fNum2; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
Foo::Foo() { m_iNum1 = 0; m_iNum2 = 0; m_fNum1 = 0.f; m_fNum2 = 0.f; } // ... |
Hello_Kitty!
unregistriert
Also in dem von dir geschilderten Fall sind Membervariablen undefiniert, unabhängig davon ob das Objekt auf dem Stack oder Heap erzeugt wurde. Das sagt der Standard, auf einem PC dürften Membervariablen globaler Objekte trotzdem immer 0 sein - weil der Speicher wie schon erwähnt vom Betriebssystem genullt wird vor der Zuteilung zur Variablen kein Code ausgeführt wird, der an diese Stelle etwas schreiben könnte.Zitat
This is the initialization performed when a variable is constructed with no initializer.
Default initialization is performed in three situations:
[...]
3) when a base class or a non-static data member is not mentioned in a constructor initializer list and that constructor is called.
The effects of default initialization are:
[...]
Otherwise [non class / non array], nothing is done: the objects with automatic storage duration (and their subobjects) are initialized to indeterminate values.
Ich persönlich mag es, wenn man (fast) alle Variablen an einer Stelle deklariert bzw. definiert. (z.B. Bei Klassen -> deklaration immer untereinander und sortiert nach Datentyp und definiert im Konstruktor(falls es das Programm zulässt)).
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
// hier soll etwas gezählt werden solange irgendeine Bedingung gilt (irgendeine Bedingung ist in diesem Fall nur ein Platzhalter, so würde das nicht übersetzt werden können. int counter = 0; while(irgendeine Bedingung) { counter++; } std::cout << "Der Counter ist: " << counter << std::endl; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
int irgendeineEingabe = 1337; int a = 0; // hier ist 0 einfach als Standardwert. switch(irgendeineEingabe) { case 42: a = irgendeineFunktion1(); break; case 19: a = irgendeineFunktion2(); break; case 1337: a = irgendeineFunktion3(); break; // hier geht es weiter } std::cout << "a hat den Wert: " << a << std::endl; |
Hello_Kitty!
unregistriert
Das sollte der Merksatz für diesen Thread sein, damit sind alle relevanten Fälle erledigt.Also noch mal in kurz, leg Variablen möglichst erst dann an wenn du sie brauchst und wenn du keinen Wert hast den du darin speichern möchtest dann weise ihnen einfach einen Standardwert zu.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Spiele Programmierer« (10.09.2015, 02:25)
Werbeanzeige