std::数组成员函数empty(),max_size()-没有用,但为了一致性

std::array member functions empty(), max_size() - useless but for consistency?

本文关键字:有用 一致性 max 组成员 数组 函数 empty std size      更新时间:2023-10-16

这些成员函数是否像看上去那样无用,只是为了提供与其他容器的一致性而存在?

例如:

std::array<int, 4> array1;  // size of 4 (but no elements initialized)
std::array<int, 0> array2;  // size of zero.
array1.empty();  // false - not empty even though no elements are initialized
array2.empty();  // true - empty and no way to add elements
array1.size();      // room for four now
array1.max_size();  // room for four forever
array2.size();      // no room for anything now
array2.max_size();  // ... or ever

"为什么std::array<T,0>不为空?"的答案处理零"size"参数和来自sizeof()的非零返回,即即使为空也会占用空间。但这不是我要问的。

是的,它们只是为了保持一致性,允许更容易的模板专业化
尽管如此,你对std::array<int, 4>一开始没有任何元素的评论是错误的:这是一个精心打扮的int[4],现在和永远
顺便说一句,根据标准,大多数派生的C++对象都不小于1。

您在以下几点上错了:

std::array<int, 4> array1;  // size of 4 but no elements

不是这样。这个数组有4个元素。它只能有4个。

array1.empty();  // false - no elements, but not empty

不,数组有4个元素(只能有4个)。所以它不是空的。

std::arrays是固定大小的,它们的大小由它们的类型决定,而不是由是否为它们的元素指定了任何值决定。

但一致性论点是正确的:容器必须具有size()empty()方法。对于std::array来说,没有它们需要特殊的规则。有了这些方法,就更容易在泛型代码中使用std::array