jest brakDlaczego std :: array nie ma konstruktora, który pobiera wartość do wypełnienia tablicy?
std::array<T,size>::array(const T& value);
niedopatrzenie? Wydaje mi się to bardzo przydatne, a dynamiczne pojemniki (takie jak std::vector
) mają podobny konstruktor.
Jestem w pełni świadomy
std::array<T,size>::fill(const T& value);
ale to nie jest konstruktorem, a pamięć zostanie wyzerowany w pierwszej kolejności. Co jeśli chcę, aby wszystkie były -1
jak this guy?
"i pamięć zostanie wyzerowana jako pierwsza" czy jesteś pewien, że to prawda? – tohava
Najpierw nie zostanie wyzerowany, chyba że o to poprosisz. –
Poza * zagregowanym * argumentem ze wszystkich odpowiedzi, może istnieć także bardziej konceptualne uzasadnienie. Konstruktor wypełniania prawdopodobnie ukryłby fakt, że tak naprawdę nie konstruuje on poszczególnych elementów. Najpierw będzie wywoływał zbiorczą inicjalizację i * potem * kopiuje wartość do elementów, nie może kopiować - konstruować elementów od razu (w przeciwieństwie do, powiedzmy 'std :: vector'). Ponieważ zawsze będzie to odpowiednik 'tablica(); array.fill(); ', pominięcie konstruktora w pierwszej kolejności nie ukrywa tego faktu. –