std :: array<T, 0> 的目的是啥?
Posted
技术标签:
【中文标题】std :: array<T, 0> 的目的是啥?【英文标题】:What is the purpose of std :: array<T, 0>?std :: array<T, 0> 的目的是什么? 【发布时间】:2020-02-12 05:31:02 【问题描述】:我发现std::array<T, 0>
的 std::array 中有一个模板部分特化。
template <typename T>
struct array<T, 0>
//...
typedef typename conditional<is_const<_Tp>::value, const char,
char>::type _CharType;
struct _ArrayInStructT _Tp __data_[1]; ;
alignas(_ArrayInStructT) _CharType __elems_[sizeof(_ArrayInStructT)];
//...
那么实现std::array<T, 0>
的目的是什么?
非常感谢!
【问题讨论】:
重新打开。链接的副本是关于std::is_empty<std::array<T, 0>>
含义的狭义问题。
【参考方案1】:
原因很简单,就是统一性。当你在写模板时,总是写std::array<Ty, N>
比写一个特例要容易得多N
为0。这种一致性经常出现:new int[0]
,operator new(0)
,@ 987654325@, for (int i = 0; i < N; ++i)
N
为 0。
【讨论】:
但是为什么想要处理这种特殊情况呢?std::array
的内在缺陷是什么,以至于需要专门针对 N == 0
案例? size()
将返回 0
,因此迭代将按预期运行(与您的 for()
示例相同)。我想不出默认实现(适用于N > 0
)会被破坏的任何情况。
@Fureeish 因为T t[0];
不是类的有效成员,对于所有T
以上是关于std :: array<T, 0> 的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
std::vector<std::array<T, N>> 或 std::array<std::vector<T>,N> 类型的数组如何存储在内存中?
如何使用省略尾随 '\0' 的字符串文字初始化 std::array<char, N>