Параметр шаблона size_t в std :: array - PullRequest
1 голос
/ 04 августа 2020

Параметры шаблона std :: array: template < class T, size_t N > class array;, где N обозначает количество элементов в массиве.

Я сомневаюсь, почему тип std::size_t? Разве std :: size_t не является псевдонимом размера объекта / указателя в байтах. std :: size_t

Почему он используется для обозначения количества элементов в std::array здесь?

1 Ответ

5 голосов
/ 04 августа 2020

Тип std::size_t определяется как тип numeri c, который может представлять размер максимально возможного объекта (скажем, N байтов).

Самый большой объект может быть массивом, и поэтому массив с максимально возможным количеством объектов представляет собой массив N char s.

Итак, std::size_t имеет смысл для индексов массива и размеры тоже .

Вы должны придерживаться этого соглашения, насколько это возможно, потому что в противном случае вы потенциально можете внести ошибки:

std::size_t обычно используется для индексации массива и l oop подсчет. Программы, которые используют другие типы, такие как unsigned int, для индексации массива могут дать сбой, например, в 64-битных системах, когда индекс превышает UINT_MAX или если он полагается на 32-битную модульную арифметику c ( cppref )

Вместо этого мы могли бы иметь std::index_t, но это было бы то же самое, что std::size_t, так что это бессмысленно.

...