繁体   English   中英

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

[英]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 :: 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM