[C++] Initalisierungsliste
-
Hi,
ich noch eine kleine Frage, sorry

Und zwar geht es um Initialisierungsliste in cpp.
Hier ein Konstruktor mit einer normalen Initialisierungsliste:
Terminal::Terminal(std::string a_meinString) : meinString(a_meinString) {}
Ich muss bei dem Übergabeparameter "a_meinString" schreiben.
Folgendes lässt sich bei mir nicht kompilieren:
Terminal::Terminal(std::string meinString) : this->meinString(meinString) {}
Der this-Zeiger funktoniert in der Initialisierungslite nicht. Im Methodenrumpf funktoniert er aber.
Gibt es eine Möglichkeit der Instanz- und Parametervariablen den gleichen Namen zu geben um so seine Instzanzvariablen zu initialisieren?mfg byte
-
Die Initialisierungsliste wird
vor dem Konstruktoraufruf
abgearbeitet, den this-Zeiger
gibts zu der Zeit noch nicht.
-
achso, also wenn ich den this-Zeiger verwenden will kann ich das nur im Methodenrumf tun?
Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben

mfg byte
-
ByteRix schrieb:
Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben

Frage: Was spricht denn dagegen? Solange der Name eindeutig ist, ist dem Compiler egal, was du angibst.
-
Glaube du bringst was durcheinander: Initalisierungsliste mit default Parametern bei der Konstruktordefinition und Initalisierungsliste beim anlegen einer konkreten Klasseninstanz sind zwei Sachen.
-
Auf allen mir bekannten Compilern funktioniert das. Ist irgendwie auch logisch, denn in der Klammer wird der Übergabeparameter verwendet weil das lokale Scope vor den Members kommt, und zum initialisieren gibts ja nur Baseclasses oder Members.
Also ich mein sowas:
struct Foo { Foo(int bar) : bar(bar) { } int bar; };Gruß
-
Helmut S. schrieb:
den this-Zeiger
gibts zu der Zeit noch nicht.
this gibts zu der Zeit schon. Der Standard sieht nur keine Möglichkeit vor, es explizit in der Initialisierungsliste zu verwenden.
ByteRix schrieb:
achso, also wenn ich den this-Zeiger verwenden will kann ich das nur im Methodenrumf tun?
Explizit, ja. Wobei das nicht für den Wert in den Klammern gilt, also der Quelle. Dort kannst du this schon verwenden (aber bitte mit Vorischt).
ByteRix schrieb:
Dann muss ich meinen Übergabeparametern wenn ich eine Initialisierungliste erstelle ja immer andere Namen geben

Genau wegen solchen Namenskonflikten benutzen Programmierer nicht selten eine spezielle Namensgebung für Member. Anhänger der Ungarischen Notation verwenden zB Präfix m_, andere zB Postfix _ .