konstruktor-reihenfolge
-
hi,
ist das ein undefined-behaviour, einfach falsch oder geht das irgendwie anders:
class base { public: base(int i) {} }; class derived : public base { private: int ein_int; public: derived( int c ) : ein_int( c ), base( ein_int ) // <= DER KNACKPUNKT ! {} };die frage ist also, hat die regel "base-constructors first" vorrang, oder das, was ich angebe...

-
Der compiler dreht dir die Reihenfolge um.
versuche malg++ xx.cc -WallKurt
-
Zuerst wird die Basisklasse konstruiert, danach alle Member in der Reihenfolge wie sie in der Klassendeklaration stehen. Die Reihenfolge in der Initialisierungsliste spielt da keine Rolle.
-
zuk:
ok, danke...und gleich noch so ein ding.
was ist hier dran das problem? dass ich ein temp-objekt in eine referenz casten muss,
oder dass "ifstream &" != "istream &" ???void f( istream & i ) {} void g() { f( ifstream( "hallo.txt" ) ); }
-
das du ein temporäres Objekt an eine Referenz übergibst.
-
kingruedi schrieb:
das du ein temporäres Objekt an eine Referenz übergibst.
Genaugenommen, dass man ein temp Objekt an eine non-const Referenz übergibt.