руководство по выводу для std :: array - PullRequest
0 голосов
/ 20 мая 2018

Я изучаю уникальный шаблон книги C ++ и пытаюсь понять, как работает руководство по выводу для std::array.Что касается определения стандарта, ниже приводится объявление

template <class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;

Например, если в основном массив создан как

std::array a{42,45,77} 

Как происходит удержание?

Спасибо

1 Ответ

0 голосов
/ 20 мая 2018

Как происходит удержание?

Все просто.

Вызов

std::array a{42,45,77}

match

array(T, U...)

с T = decltype(42) и U... = decltype(45), decltype(77), то есть T = int и U... = int, int.

Таким образом, тип a{42,45,47} становится array<T, 1 + sizeof...(U)>, поэтому std::array<int, 1 + sizeof...(int, int)>, поэтому std::array<int, 1 + 2>, то есть std::array<int, 3>

Другими словами: извлекаются типы аргументов;первый (T) используется для определения типа массива (первый параметр шаблона);остальные используются только для подсчета (sizeof...(U)).Но для второго параметра шаблона важно также сосчитать первый аргумент (типа T, поэтому 1 в 1 + sizeof...(U)).

...