C++ Frage zu Konstruktor

Gast #7303282
Lesenswert?

Hallo guten Tag, diese Schreibweise kenne ich noch nicht von einem Konstruktor: Dort habe ich es her: https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-helloworld.html

Aber es funktioniert... Worum handelt es sich denn hierbei?

1
HelloWorld::HelloWorld()
2
    : m_button("Hello World") // creates a new button with label "Hello World"
3
{... }

Danke :)

Gast #7303322
Lesenswert?

Böllermeister schrieb:

Sebastian V. schrieb:

Ich nehme an du meinst den Teil hinter dem Doppelpunkt? Das ist die Member Initialization List. Da können Membervariablen und auch Basisklassen initialisiert werden.

Ok danke! Kannte ich gar nicht.

ja ist wieder sowas was die welt nicht braucht. wirst du noch öfter sehen bei c++

#7303337
Lesenswert?

Da Baby schrieb:

Böllermeister schrieb:

Sebastian V. schrieb:

Ich nehme an du meinst den Teil hinter dem Doppelpunkt? Das ist die Member Initialization List. Da können Membervariablen und auch Basisklassen initialisiert werden.

Ok danke! Kannte ich gar nicht.

ja ist wieder sowas was die welt nicht braucht. wirst du noch öfter sehen bei c++

Oje, da compiliert einer seine Programme wohl nur mit -O0. :)

#7303361
Lesenswert?

Wenn Du noch nie einen Elementinitialisierer benutzt hast, dann hast Du

  • ggf. Zuweisungen im ctor-Rumpf verwendet (meistens falsch),
  • ggf. Elemente primitiver DT uninitialisiert gelassen (falsch),
  • ggf. bisher nur in-class Initialisierer verwendet (geht nur, falls unabhängig von ctor-Parametern)
  • ggf. noch nicht viel in C++ programmiert,
  • ...
#7303364
Lesenswert?

Wilhelm M. schrieb:

Wenn Du noch nie einen Elementinitialisierer benutzt hast, dann hast Du

  • ggf. Zuweisungen im ctor-Rumpf verwendet (meistens falsch),
  • ggf. Elemente primitiver DT uninitialisiert gelassen (falsch),
  • ggf. bisher nur in-class Initialisierer verwendet (geht nur, falls unabhängig von ctor-Parametern
  • ggf. noch nicht viel in C++ programmiert.
  • noch nie const verwendet
  • noch nie Basisklassenkonstruktoren mit Parametern aufgerufen
  • ...

Da Baby schrieb:

ja ist wieder sowas was die welt nicht braucht.

Die Welt braucht kein C++. Aber C++ braucht diese initialization list. Ohne gehts einfach nicht.

Oliver

Gast #7303654
Lesenswert?

Die Welt braucht unified initialization oder wie das heißt :)

1
HelloWorld::HelloWorld()
2
    : m_button{"Hello World"} // creates a new button with label "Hello World"
3

4
{
5
  std::string s{m_button};
6
  ...
7
  for (size_t i{0}; i != s.size(); ++i) {
8
    ...
9
  }
10
}
#7303936
Lesenswert?

loeti2 schrieb:

Die Welt braucht unified initialization oder wie das heißt :)

Heißt: uniform initialization syntax

1
> HelloWorld::HelloWorld()
2
>     : m_button{"Hello World"} // creates a new button with label "Hello 
3
> World"
4
> 
5
> {
6
>   std::string s{m_button};
7
>   ...
8
>   for (size_t i{0}; i != s.size(); ++i) {
9
>     ...
10
>   }
11
> }
12
>

Wusste gar nicht, dass std::string so einen ctor hat ;-) Oder Gtk::Button einen entsprechenden Typumwandlungs-Op ...

Gast #7308733
Lesenswert?

Wilhelm M. schrieb:

Wusste gar nicht, dass std::string so einen ctor hat ;-) Oder Gtk::Button einen entsprechenden Typumwandlungs-Op ...

Man lernt nie aus. Nee war mein Fehler.

Richtig cool wäre es wenn die uniform initialization syntax auch für default-Funktionsargumente gehen würde.

1
void foo(int i{0});
2

3
void foo(int i) {
4
  ...
5
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren