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

Inicjalizacja zmiennych w C++

Konkurs Mistrz Programowania
+2 głosów
483 wizyt
pytanie zadane 20 lutego 2024 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 2024 przez adrian17 Mentor (354,880 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 2024 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 266 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez agre Użytkownik (550 p.)
0 głosów
2 odpowiedzi 431 wizyt
0 głosów
2 odpowiedzi 394 wizyt
pytanie zadane 2 sierpnia 2022 w C i C++ przez Kuba Kaleta Nowicjusz (230 p.)

93,655 zapytań

142,576 odpowiedzi

323,091 komentarzy

63,172 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

Kursy INF.02 i INF.03
...