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

Inicjalizacja zmiennych w C++

Object Storage Arubacloud
+2 głosów
104 wizyt
pytanie zadane 20 lutego w C i C++ przez Krzysiek Kowalczyk Początkujący (360 p.)
Hej.

Własnie zacząłem kurs z learncpp żeby nauczyć się w końcu C++. Chodzi mi konkretnie sposoby inicjalizacji zmiennych.

Utknąłem tutaj: https://www.learncpp.com/cpp-tutorial/variable-assignment-and-initialization/.

Tzn widzę różnicę w składni i rozumiem że polecanym sposobem jest używać nawiasów klamrowych wszędzie gdzie się da. Jednak nigdzie nie mogę znaleźć informacji odnośnie różnic wynikających dlaczego powinno się używać właśnie takiego sposobu, jakie ma ograniczenia.

Czy ktoś z obecnych na forum jest w stanie mnie oświecic kiedy najlepiej używać jakiego sposobu?

Z góry dziękuję za poświęcony czas

Pozdrawiam

1 odpowiedź

+2 głosów
odpowiedź 20 lutego przez adrian17 Ekspert (344,860 p.)
To jest... trudne i kontrowersyjne pytanie.

Uniform initialization ma swoje zalety (na przykład, jest spójnym sposobem inicjalizowania kontenerów, oraz zapobiega przed niektórymi cichymi zmianami typów), ale ma też swoje wady - wciąż nie jest idealnie spójny i może dawać dziwne zachowania (na przykład https://probablydance.com/2013/02/02/the-problems-with-uniform-initialization/ ), no i... subiektywnie, wygląda mniej intuicyjnie dla klasycznych typów jak int.

Na przykład, google nie ma silnej preferencji za którymkolwiek w swoim kodzie: https://google.github.io/styleguide/cppguide.html#Variable_and_Array_Initialization

Osobiście wciąż używam `= 1` dla prostych typów, `= {...}` dla kontenerów, `(...)` gdy celowo wywołuję konstruktor; nie przejmuję się jakoś, że to jest "niespójne", dla mnie to nigdy nie było problemem.
komentarz 20 lutego przez Krzysiek Kowalczyk Początkujący (360 p.)

Poszukałem trochę w internecie i znalazłem informacje jakoby inicjalizacja przy pomocy nawiasów klamrowych pomagała wychwytywać i ustrzec się błędów jak chociażby przy konwersji zmiennych np z float na int. Tzw narrowing conversion. 

Rowniez w książce C++ Programming Language 4th edition znalazłem cytat jasno wskazujący użycie nawiasów klamrowych:

The = form is traditional and dates back to C, but if in doubt, use the general {} -list form (§6.3.5.2). If nothing else, it saves you from conversions that lose information (narrowing conversions; §10.5)

Jednak bez konkretnego omówienia za i przeciw. 

Podobne pytania

0 głosów
2 odpowiedzi 171 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez agre Użytkownik (550 p.)
0 głosów
2 odpowiedzi 215 wizyt
0 głosów
2 odpowiedzi 243 wizyt
pytanie zadane 2 sierpnia 2022 w C i C++ przez Kuba Kaleta Nowicjusz (230 p.)

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

61,966 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...