背景

协议编号、重试上限和静态路由表往往很久不变。把这种约束留到启动时检查,会让错误跨过编译、测试和发布多个阶段。

核心判断

  1. 常量约束尽量通过 static_assert 表达。
  2. 复杂配置表先写 constexpr 校验函数,再断言排序、唯一性和范围。
  3. 运行时输入继续做运行时校验,编译期检查不能验证配置文件内容。

最小示例

下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。

constexpr int max_retry = 3;
static_assert(max_retry > 0 && max_retry <= 10, "invalid retry limit");

边界与误区

constexpr 表示表达式具备常量求值能力,不代表所有调用都在编译期执行。不要为了编译期技巧引入难读的模板层次。

验证方式

故意把重试上限改为零或超出范围,确认构建失败且错误提示明确。复杂表还要增加重复编号和空表的编译测试。

小结

配置表、协议编号和数组尺寸等稳定约束应尽早由编译器证明。