Array = {0} im Konstruktor
-
Hallo!
Ich habe eine Klasse mit einem Array als member. Dieses Array möchte ich gerne auf NULL setzen. Normalerweise geht das ja per {0} (Btw, wie nennt man das eigentlich?), aber irgendwie klappt das in der Elementinitialisierer-liste im Konstruktor nicht so ganz.
class foo { int bar[10]; public: foo() : bar({0}) // Nicht OK { } }; int main() { int bar[10] = {0}; // OK foo f; return 0; }
Weiss jemand, wie man's richtig macht?
MfG
-
#include <cstring> class Foo { int bar[512]; public: Foo() { std::memset(bar, 0, sizeof bar); } }
Anders gehts leider nicht.
mfg unixer
-
Erstmal danke für deine Antwort.
unixer schrieb:
Anders gehts leider nicht.
Geht es nicht?! Also, das find' ich mal ne unschöne Sache. Gibt's denn dafür denn ne gute Begründung? Ansonsten, wo doch gerade die C++0x Diskussion läuft: Wär das nicht ne Sache, die in den neuen Standard rein muss (bzw. schon im Aktuellen längst überfällig ist)?
-
godlikebot schrieb:
Wär das nicht ne Sache, die in den neuen Standard rein muss (bzw. schon im Aktuellen längst überfällig ist)?
nein, muss nicht rein. man soll eh keine rohen arrays verwenden, sondern warpper, die indexgrenzenüberschreitungen checken.
-
volkard schrieb:
godlikebot schrieb:
Wär das nicht ne Sache, die in den neuen Standard rein muss (bzw. schon im Aktuellen längst überfällig ist)?
nein, muss nicht rein. man soll eh keine rohen arrays verwenden, sondern warpper, die indexgrenzenüberschreitungen checken.
Ja, damit hast du wohl Recht... Trotzdem find' ich es etwas inkonsistent das "= {0}" bei Elementinitialisierern nicht zu unterstützen.
-
class Foo { vector<int>vec; public: Foo():vec(512,0){} };
Geht doch prima so, oder?
-
Ben04 schrieb:
Geht doch prima so, oder?
Ja
-
godlikebot schrieb:
Trotzdem find' ich es etwas inkonsistent das "= {0}" bei Elementinitialisierern nicht zu unterstützen.
naja, mit typeof(data)==int mag Foo::Foo():data(0){} ja gahen, weil int data(0); geht. und int data=0; ist irgendwas komisches. das ruft angeblich erst den normalen konstruktor und dann den koperkonstruktor auf, letzterer wird aber wegoptimiert, wenn der kopierkonstruktor public ist. bei arrays ist int data[]={1,2,3} das offizielle und int data[]({1,2,3}); gibt's gar nicht.