• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konstruktor i inicjowanie danych

VPS Starter Arubacloud
+1 głos
178 wizyt
pytanie zadane 23 kwietnia 2019 w C i C++ przez Milo Obywatel (1,180 p.)

Otóż mam takie pytanie, czym się różnią poniższe kody?

// #1
class MyClass
{
private:
    int a;
public:
    MyClass (int _a) : a(_a) {};
}
// #2
class MyClass
{
private:
    int a;
public:
    MyClass (int _a)
    {
        a = _a;
    }
}

Czy obydwa kody mają jakąś różnicę w działaniu?

1 odpowiedź

+3 głosów
odpowiedź 23 kwietnia 2019 przez RafalS VIP (122,820 p.)
wybrane 23 kwietnia 2019 przez Milo
 
Najlepsza
Nie ma różnicy w działaniu. Można nawet zweryfikować, że obydwa kody generują taki sam assembler:

https://godbolt.org/z/eeN07W

Aczkolwiek jeśli składowa byłaby stała to zadziała tylko lista inicjalizacyjna.

Ponadto lista inicjalizacyjna to dobra praktyka w takich przypadkach, bo ciało konstruktora przeważnie musisz przeanalizować a jak widzisz listę inicjalizacyjną to sytuacja jest oczywista.
4
komentarz 23 kwietnia 2019 przez adrian17 Ekspert (344,100 p.)

Nie ma różnicy w działaniu

Choć jest różnica w idei. Pierwszy inicjalizuje 'a', drugi przypisuje do już zainicjalizowanego 'a'. Ma to znaczenie przy `const`, ale też na przykład przy referencjach i przy typach bez domyślnego konstruktora albo bez operatora przypisania

komentarz 23 kwietnia 2019 przez Milo Obywatel (1,180 p.)
Właśnie jedno co wiedziałem, to to, że pierwszy przykład przydaje się do inicjowania zmiennych 'const'. Dzięki za odpowiedź.
komentarz 23 kwietnia 2019 przez Dawid Markiewicz Obywatel (1,590 p.)
listy używa się tez przy inicjalizowaniu obiektów po to żeby nie były one najpierw przez konstruktor domyślny i przy dziedziczeniu do wywołania konstruktora klasy bazowej

Podobne pytania

0 głosów
2 odpowiedzi 198 wizyt
pytanie zadane 26 listopada 2016 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 533 wizyt
pytanie zadane 10 marca 2016 w Java przez piekarnik Użytkownik (720 p.)
0 głosów
2 odpowiedzi 354 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...