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