static_assert 是 C++11 引入的编译期断言机制,用于在编译阶段检查条件真假,条件为假时立即报错并显示自定义信息,从而提前拦截错误、提升模板编程的错误可读性与类型约束能力。

static_assert 是 C++11 引入的编译期断言机制,它在代码编译阶段检查条件是否为真。如果条件为假,编译器会直接报错并显示自定义提示信息,从而把错误拦截在运行前——这对模板编程尤其关键,因为模板实例化发生在编译期,很多类型约束、接口契约无法靠运行时检查发现。
用 static_assert 检查模板参数合法性
模板函数或类往往对参数类型有隐含要求(比如必须支持 + 运算、必须是整数、必须有某个嵌套类型)。不加约束容易导致一长串难以理解的模板展开错误。用 static_assert 提前拦截能大幅提升错误可读性。
- 例如:要求模板参数必须是整型
template
void safe_increment(T& x) {
static_assert(std::is_integral_v
x = x + 1;
}
若传入 std::string,编译器立刻报错:“T must be an integral type”,而不是陷入几十行 SFINAE 展开失败日志。
立即学习“C++免费学习笔记(深入)”;
结合类型特征(Type Traits)做语义约束
仅靠 sizeof 或 std::is_same 不够,要表达业务意图。比如“容器必须支持随机访问”、“指针类型必须指向 const 数据”。
- 检查迭代器类别是否满足算法需求:
template
void binary_search_impl(It first, It last) {
static_assert(std::is_same_v
 











