类型特性
类型特性
类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。
试图特化定义于 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。
定义于头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
属性查询 继承自 std::integral_constant 成员常量
value
[静态]
T 的第 N 维的元素数
(公开静态成员常量) 成员函数
operator std::size_t
转换对象为 std::size_t ,返回 value
(公开成员函数)
operator()
(C++14)
返回 value
(公开成员函数) 成员类型 类型定义value_typestd::size_ttypestd::integral_constant
获取数组类型在指定维度的大小template< class T, unsigned N = 0>
struct extent;
(C++11 起) 若 T 是数组类型,则提供等于数组第 N 维元素数量的成员常量 value ,若 N 在 [0, std::rank::value) 中。对于任何其他类型,或若 T 是在其首维度未知边界数组且 N 为 0 ,则 value 为 0 。
辅助变量模板template< class T, unsigned N = 0 >
inline constexpr std::size_t extent_v = extent::value;
(C++17 起) 可能的实现 template struct extent : std::integral_constant {}; template struct extent : std::integral_constant {}; template struct extent : std::extent {}; template struct extent : std::integral_constant {}; template struct extent : std::extent {}; 调用示例 #include #include int main() { std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; std::cout <<"std::extent::value:"<< std::extent::value<< std::endl; const auto ext = std::extent {}; std::cout <<"std::extent::value:"<< ext << std::endl; const int ints[] = {1, 2, 3, 4}; std::cout <<"std::extent<{1, 2, 3, 4}>::value:"<< std::extent::value<< std::endl; return 0; } 输出 std::extent::value: 0 std::extent::value: 1 std::extent::value: 1 std::extent::value: 1 std::extent::value: 0 std::extent::value: 0 std::extent::value: 0 std::extent::value: 9 std::extent<{1, 2, 3, 4}>::value: 4