std::array<int,0>
,大小为零的数组是什么意思?
在发布此内容之前,我已经在SO中经历了类似的问题,以及所有这些问题
关于简单数组类型和C语言的问题,大多数人都说它是非法的。但在C ++中,array<int,0>
是允许的。
根据cppreference.com
零长度数组(N == 0)有一种特殊情况。在这种情况下,
array.begin() == array.end()
,这是一些独特的价值。 <{1}}或front()
对零大小数组的调用效果未定义。
为什么它不被定义为非法?
答案 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
的特化定义了一个空容器。