std::extent
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <type_traits>
  | 
||
|   template< class T, unsigned N = 0> struct extent;  | 
(C++11 起) | |
若 T 是数组类型,则提供等于数组第 N 维元素数量的成员常量 value ,若 N 在 [0, std::rank<T>::value) 中。对于任何其他类型,或若 T 是在其首维度未知边界数组且 N 为 0 ,则 value 为 0 。
添加 extent 或 extent_v (C++17 起) 的特化的程序行为未定义。
辅助变量模板
|   template< class T, unsigned N = 0 > inline constexpr std::size_t extent_v = extent<T, N>::value;  | 
(C++17 起) | |
继承自 std::integral_constant
成员常量
|    value [静态]  | 
    T 的第 N 维的元素数  (公开静态成员常量)  | 
成员函数
|    operator std::size_t  | 
   转换对象为 std::size_t ,返回 value  (公开成员函数)  | 
|    operator() (C++14)  | 
   返回 value  (公开成员函数)  | 
成员类型
| 类型 | 定义 | 
  value_type
 | 
  std::size_t
 | 
  type
 | 
std::integral_constant<std::size_t, value> | 
可能的实现
template<class T, unsigned N = 0> struct extent : std::integral_constant<std::size_t, 0> {}; template<class T> struct extent<T[], 0> : std::integral_constant<std::size_t, 0> {}; template<class T, unsigned N> struct extent<T[], N> : std::extent<T, N-1> {}; template<class T, std::size_t I> struct extent<T[I], 0> : std::integral_constant<std::size_t, I> {}; template<class T, std::size_t I, unsigned N> struct extent<T[I], N> : std::extent<T, N-1> {};  | 
示例
运行此代码
#include <iostream> #include <type_traits> int main() { std::cout << std::extent<int[3]>::value << '\n'; // < 默认维度为 0 std::cout << std::extent<int[3][4], 0>::value << '\n'; std::cout << std::extent<int[3][4], 1>::value << '\n'; std::cout << std::extent<int[3][4], 2>::value << '\n'; std::cout << std::extent<int[]>::value << '\n'; const auto ext = std::extent<int[9]>{}; std::cout << ext << '\n'; // < 隐式转换到 std::size_t const int ints[] = {1,2,3,4}; std::cout << std::extent<decltype(ints)>::value << '\n'; // < 数组大小 }
输出:
3 3 4 0 0 9 4
参阅
|    (C++11)  | 
   检查类型是否是数组类型   (类模板)  | 
|    (C++11)  | 
   获取数组类型的维数   (类模板)  | 
|    (C++11)  | 
  从给定数组类型移除一个维度  (类模板)  | 
|    (C++11)  | 
   移除给定数组类型的所有维度   (类模板)  |