C++ std::数组成员函数empty(),max_size()-除了一致性之外没有任何用处?

C++ std::数组成员函数empty(),max_size()-除了一致性之外没有任何用处?,c++,c++11,stdarray,C++,C++11,Stdarray,这些成员函数是否看起来毫无用处,只是为了与其他容器保持一致而存在 例如: 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

这些成员函数是否看起来毫无用处,只是为了与其他容器保持一致而存在

例如:

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::数组数组1;//大小为4(但未初始化任何元素)
std::阵列2;//大小为零。
array1.empty();//false-即使未初始化任何元素,也不为空
array2.empty();//true-为空,无法添加元素
array1.size();//四个人的房间
数组1.max_size();//四个人的房间
array2.size();//现在没有地方放任何东西了
array2.max_size();/。。。或者永远

“”的答案处理零“size”参数和来自
sizeof()
的非零返回,即它即使为空也会占用空间。但这不是我要问的。

是的,它们只是为了保持一致性,允许更容易的模板专业化。
但你对std::array的评论仍然是错误的:它是一个修饰过的
int[4]
,从现在到永远。

对你来说,每个标准中没有任何一个派生的C++对象小于1。

你在一些事情上是错误的:

std::array<int, 4> array1;  // size of 4 but no elements
否,数组有4个元素(只能有4个)。所以它不是空的

std::array
的大小是固定的,它们的大小取决于它们的类型,而不是是否为它们的元素分配了任何值


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

要清楚,对于其他读者来说,“旁白”是指我提到的其他问题吗?是的,只是添加了你在链接中提到的信息,尽管这对你的问题并不重要。好的-我更正了示例代码中的相应注释。
std::array
的所有元素都是默认初始化的,如果没有给出显式的初始化器。
array1.empty();  // false - no elements, but not empty