Wykorzystanie list-inicjalizacji gdy lista ma charakter ogólny i można go zastąpić innym pojemniku, takim jak tablica, kruszywo, lub vector
, nie zmieniając jego sens dużo.
Jeśli tworzysz określoną klasę z argumentami dla konkretnego konstruktora, to starsze wersje są bardziej odpowiednie.
Unikalną cechą inicjalizacji z usztywnione-init-listy jest to, że nie pozwala zwężenie konwersje które mogłyby spowodować dane liczbowe zostaną utracone, na przykład część ułamkową liczby zmiennoprzecinkowej lub wysokich bitów z long
. Pomaga to oznaczać (lub zapobiegać) błędom wynikającym z zamiany np. węższy typ tablicy podczas refaktoryzacji kodu.
Podobnie, drugi przypadek, w którym x{ y }
jest odpowiedni, jest przeprowadzany przy konwersji numerycznej, której nie można uznać za stratną. x(y)
będzie bardzo się starał, aby dokonać konwersji, nawet odwołując się do reinterpret_cast
, i na ogół należy go unikać.
Terminologia "jednolita inicjalizacja" jest nieco optymistyczna i nie pojawia się w standardzie. Nie jest właściwe we wszystkich przypadkach. Klasyfikacja ogólnie wskazuje na listy, więc jest poprawnie nazywana inicjalizacją listy. I właśnie wtedy należy go użyć.
Nie, to jest "dlaczego" i jest to "kiedy". Poważnie ludzie. – Potatoswatter
@Potatoswatter http://stackoverflow.com/questions/1863784/uniform-initialization-in-c0x-when-to-use-instead-ofrr=1 itd. – Rapptz
@Rapptz OK, teraz znajdź jeden z odpowiedziami, które sprawiają, że sens, lub są lepsze niż ten, który tu dodałem :) – Potatoswatter