Ответ 1
Я бы не стал беспокоиться об этом. Если вы посмотрите на интерфейс std::array<T, N>
, он очень мал, и большинство функций-членов (в основном обеспечивающих оболочку для манипуляции с указателями) - это однострочные, которые будут полностью оптимизированы в любом приличном компиляторе на уровнях оптимизации режима выпуска.
Кроме того, вы не платите за то, что не используете, поскольку неиспользуемые не виртуальные функции-члены (std::array<T, N>
делает не имеют функций-членов virtual
) шаблонов классов, которые не могут быть созданы. Малая стандартная цитата:
14.7.1 Неявное создание экземпляра [temp.inst]
11 Реализация не должна неявно создавать функцию шаблон, шаблон переменной, шаблон-член, не виртуальный член функция, класс-член или статический член данных шаблона класса что не требует создания экземпляра. [...]
Есть также некоторые перегруженные реляционные операторы ==
и <
, которые семантически эквивалентны std::equal
и std::lexicographical_compare
. На практике эти операторы также должны быть реализованы с точки зрения этих алгоритмов (жалуйтесь на своего поставщика, если они этого не делают).
Единственное маленькое беспокойство - небольшая лишняя накладная часть времени компиляции, но не должно быть нулевого размера кода и служебных программ.
Связанный, но не идентичный: Технический отчет по производительности С++ сделал много тщательных тестов на тонком классе обертки вокруг встроенных типов (int
, double
) и нашли близкие к нулю накладные расходы для технологии компилятора 2006 года. Вы можете повторить их тестирование, чтобы проверить это для std::array<T,N>
vs. T[N]