initialisierungslist
-
links zu http://tutorial.schornboeck.net/initliste.htm
class Klasse
{
private:
int& r;
int const c;
public:
Klasse(int i)
: r(i), c(i)
{
}
};
...Man sollte immer eine Initialisierungsliste verwenden, denn damit erspart man sich den Aufruf des Default Konstruktors. Dies kann einen großen Geschwindigkeitsvorteil bringen, denn es muss die Variable nicht erst mit sinnlosen Standardwerten gefüllt werden, sondern wir können gleich die richtigen Werte verwenden....was für default konstruktor hier?
-
Hier nicht, die Aussage gilt nur für Membervariablen, die tatsächlich default-Konstruktoren haben.
-
- quatsch -
-
- Antwort auf Quatsch -
-
Das ist kein Quatsch... dadurch wird halt nicht der Default-Konstruktor deiner Variable c aufgerufen, sondern direkt der Korrekte. Der Geschwindigkeitsvorteil ist aber bei solch primitiven Typen nicht relevant und sollte auch vom Compiler rausoptimiert werden.
-
- Antwort auf Antwort auf Quatsch -
-
The-Kenny schrieb:
- quatsch -
Damit war nicht die Frage des Threads gemeint, sondern das, was ich geschrieben habe

-
Bevor das jetzt noch mehr Leute nicht verstehen:
- Das "Quatsch" steht jetzt da, wo vorher Quatsch stand und wegeditiert wurde.
- "Antwort auf Quatsch" war eine Antwort auf den Quatsch und wurde fairerweise ebenfalls wegeditiert.
- Die Aussage, dass Initialisierungslisten wegen sinnloser Defaultkonstruktoraufrufe bevorzugt werden sollten ist richtig, hat aber nichts mit dem geposteten Code zu tun. Hier sind die Member eine Referenz und eine Konstante. Denen kann man überhaupt nichts zuweisen, Initialisierung ist die einzige Möglichkeit.
-
dadurch wird halt nicht der Default-Konstruktor deiner Variable c aufgerufen
nehmen wir an, c ist eine Instanz von class Object, (kein const, kein ref)
class MyClass { public: MyClass(Object& aObject) { c = aObject; //hier Zuweisungsoperator wird aufgerufen, nicht Konstructor } private: Object c; }wo wird default Konstructor aufgerufen?
-
Bevor das Programm in den Konstruktorblock von Myclass springt. Du hast im Konstruktor garantiert vollständig initialisierte (im RAII-Sinne) Membervariablen.