跳转至

ev-glaze-consteval-renamed-size-003

字段 值
项目 stephenberry/glaze
固定 commit d78832c82289
路径 include/glaze/reflection/get_name.hpp
行段 L321-L333
特性 constexpr 中的动态分配
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-27
测试代码 否
发现方式 manual

用法

用 consteval 求出的长度填充固定大小数组,避免常量求值结束后留下悬空分配

为什么典型

瞬态 std::string 只用于求长度,结果存入 std::array,避免常量求值结束后留下悬空分配。

摘录

   template <class T, size_t I, size_t N = renamed_key_size<T, I>()>
   struct renamed_key_storage
   {
      static constexpr auto value = [] {
         std::array<char, N + 1> arr{};
         auto str = meta<std::remove_cvref_t<T>>::rename_key(member_nameof<I, T>);
         for (size_t i = 0; i < N; ++i) {
            arr[i] = str[i];
         }
         arr[N] = '\0';
         return arr;
      }();
   };

备注

生产路径;renamed_key_storage 把编译期字符串降级为固定大小数组,供运行期直接使用。

查看固定 commit 源码 · 返回证据索引