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

Inicjalizacja zmiennych w C++

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+2 głosów
307 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 Mentor (351,140 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 194 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez agre Użytkownik (550 p.)
0 głosów
2 odpowiedzi 268 wizyt
0 głosów
2 odpowiedzi 288 wizyt
pytanie zadane 2 sierpnia 2022 w C i C++ przez Kuba Kaleta Nowicjusz (230 p.)

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2476p. - Tomasz Bielak
  6. 2445p. - Łukasz Siedlecki
  7. 2443p. - rucin93
  8. 2373p. - Marcin Putra
  9. 2367p. - Adrian Wieprzkowicz
  10. 2310p. - Michal Drewniak
  11. 2210p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1701p. - Michał Telesz
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...