std :: size的大小为零的数组

时间:2015-03-08 16:53:17

标签: c++ stdarray

std::array<int,0>,大小为零的数组是什么意思?

在发布此内容之前,我已经在SO中经历了类似的问题,以及所有这些问题 关于简单数组类型和C语言的问题,大多数人都说它是非法的。但在C ++中,array<int,0>是允许的。

根据cppreference.com

  

零长度数组(N == 0)有一种特殊情况。在这种情况下,array.begin() == array.end(),这是一些独特的价值。 <{1}}或front()对零大小数组的调用效果未定义。

为什么它不被定义为非法?

2 个答案:

答案 0 :(得分:10)

  

std :: array,大小为零的数组是什么意思?

与空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

答案 1 :(得分:2)

std :: array被认为是可以为空的其他标准容器。因此{N}等于零的std::array的特化定义了一个空容器。