C++17及以后STL中,如何获取C数组typedef的constexpr大小(无sizeof/变量)
C++17+ STL获取typedef数组类型的constexpr元素数量
C++17及以上版本的STL中,std::extent就是你需要的原生工具,完全满足无需额外声明变量、无需指定元素类型的需求。
用法示例
首先包含头文件<type_traits>,然后直接使用变量模板std::extent_v:
#include <type_traits> typedef double MyCArrayType[20]; constexpr size_t sz = std::extent_v<MyCArrayType>; // sz的值为20
原理说明
std::extent是C11引入的类型特性,C17将其对应的变量模板std::extent_v标记为constexpr,专门用于获取数组类型的指定维度大小:
- 对于一维数组类型,默认获取第0维(即数组总元素数)
- 对于多维数组,可通过第二个模板参数指定维度,比如
std::extent_v<int[5][10], 1>会返回10
替代自定义实现(若偏好函数式语法)
如果更倾向于类似std::size<MyCArrayType>()的函数调用形式,STL原生没有提供,但可以基于std::extent快速实现:
template <typename ArrayType> constexpr size_t array_size() noexcept { return std::extent_v<ArrayType>; } // 调用方式 constexpr size_t sz = array_size<MyCArrayType>();
内容的提问来源于stack exchange,提问作者RepeatTillDone
相关产品推荐
相关产品推荐

