You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:50:26