std::数组成员函数empty(),max_size()-没有用,但为了一致性
std::array member functions empty(), max_size() - useless but for consistency?
这些成员函数是否像看上去那样无用,只是为了提供与其他容器的一致性而存在?
例如:
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
。
相关文章:
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 其中降频广播实际上是有用的
- 标准::make_pair 和标准::make_optional之间的一致性
- 可以从std::string继承以提供类型一致性吗
- 既然我们有内联变量,extern const 还有用吗?
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 函子还有更有用的用例吗?
- 顺序一致性和获取/发布语义有什么区别?
- 用于验证 Visual Studio 一致性开关对生成的代码的影响的工具
- `__declspec(novtable)`没有用吗
- P1008("prohibit aggregates with user-declared constructors")在实践中什么时候有用?
- 当迭代器(输入参数)通常不是constexpr时,constexpr算法真的有用吗
- 将指向数据成员的指针传递给 std::invoke 时有哪些用例和有用性?
- std::bit_cast 和 std::start_lifetime_as 之间有什么有用的区别吗?
- 在现代C++中,临时寿命延长何时有用?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 获取/发布与 C++11 中的顺序一致性?
- 为什么'acquire/release'不能保证 c++11 中的顺序一致性?
- std::数组成员函数empty(),max_size()-没有用,但为了一致性