这些成员函数是否像它们看起来一样无用,只是为了提供与其他容器的一致性?
例如:
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
this question的答案涉及零&#34;大小&#34; param和sizeof()的非零返回,即,即使空的时候也占用空间。但这不是我要问的。
答案 0 :(得分:7)
是的,它们只是为了保持一致性,允许更容易的模板专业化
关于std::array<int, 4>
从没有元素开始的评论仍然是错误的:它是一个装扮int[4]
,现在和永远。
除此之外,根据标准,大多数派生的C ++对象都不会小于1.
答案 1 :(得分:4)
你错了几件事:
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
。