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

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

根据cppreference.com



为什么不将其定义为非法?

最佳答案



例如,与一个空的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

关于c++ - 大小为零的std::array,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28929165/

10-16 04:35
查看更多