Wpis z mikrobloga

#cpp

Czym to się różni i czego najlepiej używać?

struct Foo
{
  int bar = 3;
};

struct Foo
{
  int bar;
  Foo() : bar(3) {}
};

struct Foo
{
  int bar;
  Foo() { bar = 3; }
};
  • 7
@zwei: Sam jestem na etapie nauki i w razie jakbym się mylił, to proszę kogoś doświadczonego o poprawienie mnie ;)
Pierwsza deklaracja inicjalizuje po prostu zmienną bar po utworzeniu już struktury.
W drugiej dochodzi do deklaracji zmiennej bar, a następnie utworzenie zagnieżdżonej struktury, dla której zmienna bar inicjalizowana jest poprzez listę inicjalizacyjną. Taka lista inicjalizuje zmienne PRZED przekazaniem sterowania do bloku instrukcji znajdujących się wewnątrz jakiejś klasy czy struktury. Dzięki temu
@zwei: Pewnie kolega uczył się starego standardu, przykład pierwszy działa dopiero od C++14 wcześniej trzeba było używać tego drugiego, który jak dobrze twierdzisz, jest jednoznaczny.
Trzeci nie jest initializacją, tylko zwykłym przypisaniem.
@visez: gwoli ścisłości: wcześniej też były deklaracje z inicjalizacją, ale tylko składników stałych statycznych typu całkowitego.

A co do pytania @zwei: sposób drugi jest najbardziej uniwersalny. Trzeci też jest poprawny - różnica jest taka, że nie zastosujesz go do składowej stałej (sprawdź: zmień int bar na const int bar). Pierwszy sposób odradzam - jest mało profesjonalny i możesz mieć problem z późniejszą modyfikacją, kiedy klasa / struktura się rozrośnie.