Verständnisprobleme im Zusammenhang mit Initialisierung
-
Hi,
bin dabei, einen Beispielcode aufzuschlüsseln, und bleibe bei folgendem hängen:
class TCorner { public: const TCorner *Parent; ... einige Int-Felder, kein Konstruktor }; static TCorner root_corner = {(TCorner*) NULL};Ich versteh die letzte Zeile nicht, muss aber zugeben, dass ich (noch) nicht viel Ahnung von C++ habe. Was bedeutet der Term {(TCorner*) NULL}? root_corner ist doch keine Zeigervariable.
-
Das ist das gleiche wie
struct foo { int a; double b; string c; int d; }; // ... foo bar = {12, 3.4, "Huhu"}; // Achtung: bar.d nicht initialisiert!Das ist einfach eine Möglichkeit der Initialisierung. Bloß ist hier der initialisierte Datenmember ein Zeiger (TCorner::Parent).
Das
(TCorner*) NULLan sich ist sehr merkwürdig.NULLoder0würden schon reichen. Heutzutage würde man nullptr benutzen, aber der Code ist wohl etwas älter. Insgesamt fühle ich mich unwohl, wenn ich diesen Code sehe. Man kann es zwar nur ahnen, aber er sieht aus wie ein Teil von einem größeren, unsauberen Code.
-
Die nicht in der initializer list aufgeführten Member werden "value initialized". w1, w2, und w3 unten sind alle gleich.
#include <cassert> struct widget{ const char* p; int i; double j; }; int main(){ widget w1 = { nullptr }; // Dein Beispiel widget w2 = { 0, 0, 0 }; widget w3 = { }; assert(w1.p == w2.p && w1.p == w3.p); assert(w1.i == w2.i && w1.i == w3.i); assert(w1.j == w2.j && w1.j == w3.j); }Ich bin mir auch nicht sicher, ob das "guter Stoff" zum lernen von C++ ist...
-
Danke, ist klar jetzt. Wenn ich also nur einzelne Felder initialisieren will, müssen die demnach am Anfang stehen.
Zum Code: In der Tat ist der Code schon älter, so um 2002 herum. Es handelt sich um einen Quadtree-Algorithmus (LOD), programmiert übrigens von Ulrich Thatcher, der sich in dem Bereich durchaus einen Namen gemacht hat. Trotzdem ist der Code grässlich und unübersichtlich. Ich will daran nicht unbedingt lernen, aber ich muss den Algorithmus irgendwie für meine Zwecke umsetzen, und noch habe ich Hoffnung, dass ich den Code etwas "glätten" kann (wobei man ja auch was lernt).