gnuc++ 4.8.2 extent实现如下:

/// extent

template<typename, unsigned _Uint>
struct extent: public integral_constant<std::size_t, 0>
{static const int _ty = 1;};

template<typename _Tp, unsigned _Uint, std::size_t _Size>
struct extent<_Tp[_Size], _Uint>
: public integral_constant<std::size_t,_Uint == 0 ?
_Size : extent<_Tp,_Uint - 1>::value>
{ static cosnt int _ty =2; };

template<typename _Tp, unsigned _Uint>
struct extent<_Tp[], _Uint>: public integral_constant<std::size_t,
_Uint == 0 ? 0 : extent<_Tp,_Uint - 1>::value>
{ static cosnt int _ty =3; };
typedef int arr[2][3][3];cout << extent<arr>::_ty是2。

为什么数组匹配第二个工具?什么是_Tp[]

我想知道extent的工作原理:o

最佳答案

您正在有效地做:

std::extent<int[2][3][3]>

在第二个模板中,实例化范围接受具有已知大小( _Tp [_Size ])的数组的模板参数。这个是您所拥有的

在第三个模板中,实例化范围接受大小未知的数组的模板参数( _Tp [] )。此不是您所拥有的

现在,对于第一个模板,当使用非数组类型实例化范围时,这是一个“默认”模板将变得更加明显。此不是您所拥有的

为了回答您的第二个问题, _Tp [] 表示未知大小的数组类型,例如 int []

10-04 21:53