2Danke
ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
858
858
EMPFEHLEN
-
20.11.09 08:31 #1
- Registriert seit
- Apr 2005
- Beiträge
- 191
Hallo Leute,
ich habe ein Problemchen mit Felder initialisieren.
Code :1 2 3 4 5 6 7 8 9 10
struct Beispiel { Beispiel(); // constructor double x[4]; // Daten }; // Methode 1: wird vom Compiler verweigert Beispiel::Beispiel() : x[0](0.0), x[1](0.0), x[2](0.0), x[3](0.0) { } // Methode 2: zulässig Beispiel::Beispiel() { x[0] = x[1] = x[2] = x[3] = 0.0; }
Es wird ja immer gesagt, man soll die Constructor Initialiser List verwenden, wann immer möglich, weil es sonst Performance-Einbußen gibt. Nur scheint das hier nicht zu gehen. Oder geht es doch?Grüße OS
-
20.11.09 08:59 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
20.11.09 09:15 #3
- Registriert seit
- Apr 2005
- Beiträge
- 191
Grüße OS
-
20.11.09 09:30 #4Tuxtrainer Tutorials.de Gastzugang
Constructor Initialiser Listen dienen dazu Kontruktor-Argumente an die Konstruktoren der Basisklasse(n) weiterzureichen (also nach "unten" durchzureichen)
versus der Zuweisung innerhalb des Konstruktors der abgeleiteten Klasse.
Neben der Performancethematik funktioniert die Zuweisung innerhalb des Konstruktors der abgeleiteten Klasse auch nur bei public-Elementen der Bsasisklasse(n).
Die reine __Initialisierung__ sollte immer innerhalb des "eigenen" Konstruktors erfolgen.
Methode 2 ist ergo nicht nur zulässig sondern auch genau passend.
-
20.11.09 09:59 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Was ist denn eine "reine Initialisierung"?
@Onkel Schuppig: Arrays (wie auch primitive Typen) werden grundsätzlich nicht initialisiert, sonst müßtest du es ja nicht manuell tun. Für diese Typen ist es dann im Grunde auch egal ob du sie in der Initialization List oder im Konstruktorblock initialisierst.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
20.11.09 10:35 #6
- Registriert seit
- Aug 2007
- Beiträge
- 166
Wenn das Array static const ist waere folgendes moeglich:
Code :1 2 3 4 5 6 7 8 9 10
class Foo { public: Foo() {} private: static const int array[6]; }; const int Foo::array[6] = {0, 1, 2, 3, 4, 5};
Alles andere ist im aktuellen ISO Standard von c++ nicht moeglich, wird aber mit c++0x kommen. Also demnaechst... heh.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class Foo { public: Foo(): array({0, 1, 2, 3, 4, 5}) {} private: int array[6]; // 0, 1, 2, 3, 4, 5 }; class Bar { public: Bar(): array({0}) {} private: int array[6]; // 0, 0, 0, 0, 0, 0 };
Kompiliert mit dem -std0c++0x Parameter unter gcc 4.4.1
Viel Spass mit deiner neuen Schrotflinte und nicht auf deine Beine zielen.I'm not slacking off!
My code's just compiling.
-
20.11.09 20:25 #7
- Registriert seit
- Apr 2005
- Beiträge
- 191
Gut.
Ich weiß jetzt, dass es egal ist, ob in der Initialisierungsliste oder im Konstruktor selbst das Array mit Nullen gefüllt wird. Dann werde ich es für meine Anwendung, bei der es auf Performance ankommt, nach Methode 2 machen.
Ich probiere selbst noch aus, ob es mit memset noch schneller geht.
@Adrian_Broher:
Das demnächst ein neuer Standard rauskommt, ist auch interessant.
Aber du musst mich verwechseln: Ich bin nicht der mit der Schrotflinte!
Grüße OS
-
Ähnliche Themen
-
Problem JavaCC "Second call to constructor"
Von MadMax2581 im Forum JavaAntworten: 2Letzter Beitrag: 24.08.10, 15:30 -
"auto_increment" Feld erst später füllen ?
Von baeckerjunge im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 27.09.07, 09:13 -
Error: "scroll is not a constructor"
Von redX im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 08.11.06, 15:52 -
Edit Feld in "Single document" wie in "Dialog based"
Von excelite im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 26.01.06, 08:24 -
<input type="text" value=""> mit $variable füllen
Von Kopfballstar im Forum PHPAntworten: 7Letzter Beitrag: 04.03.05, 14:07





Zitieren


Login






