Инициализация std::array в библиотеке stl

Почему при инициализации std::array необходимо задавать размер?


Ответы (1 шт):

Автор решения: αλεχολυτ

Начиная с C++17 размер можно не задавать:

#include <array>

int main() {
    std::array<int, 2> a = {1,2}; // до C++17
    std::array b = {1,2};         // С++17 и выше
}

Эта возможность основана на Class Template Argument Deduction (CTAD).

А в C++20 ещё добавили std::to_array, где можно при необходимости указать тип элементов, если он отличается от выведенного автоматически:

auto c = std::to_array<long>({1,2});

Размер при этом так же указывать не надо.

→ Ссылка