背景
协议编号、重试上限和静态路由表往往很久不变。把这种约束留到启动时检查,会让错误跨过编译、测试和发布多个阶段。
核心判断
- 常量约束尽量通过 static_assert 表达。
- 复杂配置表先写 constexpr 校验函数,再断言排序、唯一性和范围。
- 运行时输入继续做运行时校验,编译期检查不能验证配置文件内容。
最小示例
下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。
constexpr int max_retry = 3;
static_assert(max_retry > 0 && max_retry <= 10, "invalid retry limit");
边界与误区
constexpr 表示表达式具备常量求值能力,不代表所有调用都在编译期执行。不要为了编译期技巧引入难读的模板层次。
验证方式
故意把重试上限改为零或超出范围,确认构建失败且错误提示明确。复杂表还要增加重复编号和空表的编译测试。
小结
配置表、协议编号和数组尺寸等稳定约束应尽早由编译器证明。