Насколько я понимаю, шаблонирование c++ работает путем компиляции отдельного класса или функции для каждого необходимого типа. Это кажется логичным для классов или функций, которые будут вызываться только для нескольких различных типов/параметров, но для std::array
кажется, что это может привести к тому, что один и тот же класс будет скомпилирован в сотни разных версий.
Я понимаю преимущества std::array
перед массивами в стиле C, но кажется, что использование первого приведет к огромным двоичным размерам по сравнению с последним, если мое предположение верное.
Например, если, скажем, в большой программе мы в конечном итоге используем 99 массивов разных размеров во всем коде, так что мы эффективно имеем:
int arr[1] = { ... }
int arr[2] = { ... }
int arr[...] = { ... }
int arr[99] = { ... }
int arr[100] = { ... }
Или
std::array<int, 1> arr = { ... }
std::array<int, 2> arr = { ... }
std::array<int, ...> arr = { ... }
std::array<int, 99> arr = { ... }
std::array<int, 100> arr = { ... }
Приведет ли пример std::array
к тому, что весь класс и все его функции будут скомпилированы в двоичный файл 99 раз?