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&lt;T, 0&gt; 的 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&lt;T, 0&gt;的目的是什么?

非常感谢!

【问题讨论】:

重新打开。链接的副本是关于 std::is_empty&lt;std::array&lt;T, 0&gt;&gt; 含义的狭义问题。 【参考方案1】:

原因很简单,就是统一性。当你在写模板时,总是写std::array&lt;Ty, N&gt;比写一个特例要容易得多N为0。这种一致性经常出现:new int[0]operator new(0),@ 987654325@, for (int i = 0; i &lt; N; ++i) N 为 0。

【讨论】:

但是为什么想要处理这种特殊情况呢? std::array 的内在缺陷是什么,以至于需要专门针对 N == 0 案例? size() 将返回 0,因此迭代将按预期运行(与您的 for() 示例相同)。我想不出默认实现(适用于N &gt; 0)会被破坏的任何情况。 @Fureeish 因为T t[0]; 不是类的有效成员,对于所有T

以上是关于std :: array<T, 0> 的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

std::vector<std::array<T, N>> 或 std::array<std::vector<T>,N> 类型的数组如何存储在内存中?

std::array<T, ?> 类型的成员变量

附加到 std::array

如何使用省略尾随 '\0' 的字符串文字初始化 std::array<char, N>

如何使用带有聚合初始化的 std::array 定义向量类?

c++中的矩阵和向量模板类