std::array<int,0>大小为零的数组是什么意思?
在发布之前我已经在SO中经历了类似的问题,所有这些问题都是关于简单的数组类型和C语言,并且大多数人都认为这是非法的.但是在C++中array<int,0>是允许的.
根据cppreference.com
零长度数组(N == 0)有一种特殊情况.在那种情况下,
array.begin() == array.end()这是一些独特的价值.调用front()或back()对零大小的数组的影响是未定义的.
为什么不将它定义为非法?
Chr*_*ckl 11
拥有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
};
Run Code Online (Sandbox Code Playgroud)
我想每个编译器std::array都是这样实现的.
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |