std::大小为零的数组
std::array of size zero
大小为零的std::array<int,0>
数组是什么意思?
在发布此内容之前,我在SO中经历了类似的问题,以及所有这些问题问题是关于简单的数组类型和 C 语言,其中大多数人说它是非法的。但在C++ array<int,0>
是允许的。
根据 cppreference.com
零长度数组 (N == 0) 有一个特殊情况。在这种情况下,
array.begin() == array.end()
,这是一些独特的值。对零大小数组调用front()
或back()
的影响是不确定的。
为什么它不被定义为非法?
拥有标准::数组,大小为零的数组是什么意思?
与例如空std::vector
或空std::set
相同。
使为什么它不被定义为非法?
它合法化是可取的,因为这意味着当std::array
的大小是编译时计算的结果时,泛型编程不必处理特殊情况。
由于模板专业化,可以将其定义为合法。例如,Visual C++附带的实现以类似于以下内容的方式专门化std::array
:
template<class T>
class array<T, 0> // specialisation
{
// ...
size_type size() const
{
return 0;
}
T elements[1]; // the raw array cannot have a size of 0
};
我想每个编译器都实现了这样的std::array
。
std::array 被视为像其他可以为空的标准容器一样。因此,N 等于零的 std::array
的专用化定义了一个空容器。
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将浮动的heightmap数组导出为16位原始值
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何在 C++ 中将数组划分为不同的数组
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 我应该如何将较小的std::数组构造为较大数组的切片
- 将一个std::数组拆分为一个较小大小的std::array元组
- 在最小执行时间内找到给定数组中和为零的所有唯一三元组