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 [] 。