为什么在std :: array size_t和std :: vector中的size_type通常是size_t?

时间:2019-11-07 06:39:44

标签: c++ stdvector size-t stdarray

文档说size_type中的std::vector通常是size_t,这很合理,因为实现可以选择使用不同的方法。

但是为什么size_type = size_t中有std::array。特别是在这里,由于std::array经常用在小型µC上,最好让实现具有一定的自由度。

这是文档缺陷吗?

1 个答案:

答案 0 :(得分:1)

之所以这样定义是因为size_t被定义为对所有数组都足够。如果要为较小的数组使用较小的类型,则可以随时根据constexpr的值来缩小。

template <typename Array>
struct small_array_size
{
    using type = size_t
};

template <typename T, size_t N, typename = std::enable_if_t<N < 256>>
struct small_array_size<std::array<T, N>>
{
    using type = uint8_t;
};

template <typename T, size_t N, typename = std::enable_if_t<N < 65536>>
struct small_array_size<std::array<T, N>>
{
    using type = uint16_t;
};

template <typename Array>
using small_array_size_t = typename small_array_size<Array>::type;