std::大小为零的数组

std::array of size zero

本文关键字:数组 小为 std      更新时间:2023-10-16

大小为零的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 的专用化定义了一个空容器。